código de prueba ogro

Código de demostración:

#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;
};

Enlaces de referencia:
https://blog.csdn.net/u011733376/article/details/62230179
https://blog.csdn.net/leonwei/article/details/5819248

Aprender enlace a ensayar:
https://blog.csdn.net/y601500359/article/details/48023961

Publicado 90 artículos originales · ganado elogios 26 · Vistas de 100.000 +

Supongo que te gusta

Origin blog.csdn.net/sky_person/article/details/98910576
Recomendado
Clasificación