Demo 代码:
#include "OgreApp.h"
#include <OgreRTShaderSystem.h>
COgreApp::COgreApp() :OgreBites::ApplicationContext("OgreTutorialApp"){
mCamPosZ = 20;
mFishRotate = 0;
mCamNode = nullptr;
mFishNode = nullptr;
}
void COgreApp::setup(void)
{
// do not forget to call the base first
OgreBites::ApplicationContext::setup();
// register for input events
addInputListener(this);
// get a pointer to the already created root
Ogre::Root* root = getRoot();
Ogre::SceneManager* scnMgr = root->createSceneManager();
// register our scene with the RTSS
Ogre::RTShader::ShaderGenerator* shadergen = Ogre::RTShader::ShaderGenerator::getSingletonPtr();
shadergen->addSceneManager(scnMgr);
// without light we would just get a black screen
Ogre::Light* light = scnMgr->createLight("MainLight");
Ogre::SceneNode* lightNode = scnMgr->getRootSceneNode()->createChildSceneNode();
lightNode->setPosition(0, 10, 15);
lightNode->attachObject(light);
// also need to tell where we are
mCamNode = scnMgr->getRootSceneNode()->createChildSceneNode();
mCamNode->setPosition(0, 0, mCamPosZ);
mCamNode->lookAt(Ogre::Vector3(0, 0, -1), Ogre::Node::TS_PARENT);
// create the camera
Ogre::Camera* cam = scnMgr->createCamera("myCam");
cam->setNearClipDistance(5); // specific to this sample
cam->setAutoAspectRatio(true);
mCamNode->attachObject(cam);
// and tell it to render into the main window
getRenderWindow()->addViewport(cam);
// finally something to render
Ogre::Entity* ent = scnMgr->createEntity("Sinbad.mesh");
Ogre::SceneNode* node = scnMgr->getRootSceneNode()->createChildSceneNode();
node->attachObject(ent);
//Ogre::Entity* ent2 = scnMgr->createEntity("fish.mesh");
//mFishNode = node->createChildSceneNode();
//Ogre::Quaternion quat;
//quat.FromAngleAxis(Ogre::Radian(mFishRotate / 180.0*3.1415926), Ogre::Vector3(0, 1, 0));
//mFishNode->rotate(quat);
//mFishNode->setPosition(Ogre::Vector3(0,5,0));
//mFishNode->attachObject(ent2);
Ogre::Animation *ani = scnMgr->createAnimation("KameAni", 2);
ani->setInterpolationMode(Ogre::Animation::IM_LINEAR);
Ogre::NodeAnimationTrack* t0 = ani->createNodeTrack(0, node);
Ogre::TransformKeyFrame* k_t0_0 = t0->createNodeKeyFrame(0);//设置该帧的时间点
k_t0_0->setTranslate(Ogre::Vector3(0, 0, 0));//设置该帧处这个结点的位置和其他几何状态
Ogre::TransformKeyFrame* k_t0_1 = t0->createNodeKeyFrame(1);
k_t0_1->setTranslate(Ogre::Vector3(3, 3, 0));
mAnimState = scnMgr->createAnimationState("KameAni");
//as->setEnabled(false);
//as->setTimePosition(as->getTimePosition());
mAnimState->setEnabled(true);
mAnimState->setLoop(true);
//Ogre::ResourceGroupManager::getSingleton().createResourceGroup();
}
void COgreApp::frameRendered(const Ogre::FrameEvent& evt) {
mAnimState->addTime(evt.timeSinceLastFrame);
static bool isAnied = false;
isAnied = !isAnied;
if (isAnied)
mAnimState->setTimePosition(1);
else
mAnimState->setTimePosition(0);
//mFishRotate = 0.015;
//if (mFishRotate > 360.0)
// mFishRotate = 0.0;
//Ogre::Quaternion quat;
//quat.FromAngleAxis(Ogre::Radian(mFishRotate), Ogre::Vector3(0, 1, 0));
//mFishNode->rotate(quat);
}
bool COgreApp::keyPressed(const OgreBites::KeyboardEvent& evt)
{
if (evt.keysym.sym == OgreBites::SDLK_ESCAPE)
{
getRoot()->queueEndRendering();
}
return true;
}
bool COgreApp::keyReleased(const OgreBites::KeyboardEvent& evt) {
return true;
}
bool COgreApp::mouseWheelRolled(const OgreBites::MouseWheelEvent& evt) {
mCamPosZ += evt.y;
mCamNode->setPosition(0, 0, mCamPosZ);
return true;
}
#include <iostream>
#include "OgreApp.h"
int main()
{
std::cout << "Hello World" << std::endl;
COgreApp app;
app.initApp();
app.getRoot()->startRendering();
app.closeApp();
return 0;
}
#pragma once
#include <Ogre.h>
#include <OgreApplicationContext.h>
class COgreApp :public OgreBites::ApplicationContext,public OgreBites::InputListener{
public:
COgreApp();
virtual void frameRendered(const Ogre::FrameEvent& evt);
virtual bool keyPressed(const OgreBites::KeyboardEvent& evt);
virtual bool keyReleased(const OgreBites::KeyboardEvent& evt);
virtual bool mouseWheelRolled(const OgreBites::MouseWheelEvent& evt);
void setup(void);
protected:
private:
float mCamPosZ;
float mFishRotate;
Ogre::SceneNode* mFishNode;
Ogre::SceneNode* mCamNode;
};
参考链接:
https://blog.csdn.net/u011733376/article/details/62230179
https://blog.csdn.net/leonwei/article/details/5819248
待测试学习链接:
https://blog.csdn.net/y601500359/article/details/48023961