ogre2.1学习(一)Sample_Tutorial01_Initialization

Sample_Tutorial01_Initialization,作为Ogre2.1的一个入门例子,该例子创建一个空场景,可以说是一个Ogre应用程序简单框架,以下介绍下这个例子:


主要类介绍:


MainEntryPoints类: 系统的入口点,该类定义了静态的方法,需要具体实例自己实现createSystems和destroySystems方法,以此完成初始化、卸载、线程模式等工作:

主要方法:

createSystems();

destroySystems();

mainAppMultiThreaded();

mainAppSingleThreaded();


GameState类:

派生自:MouseListener, KeyboardListener, JoystickListener,处理外部输入事件,同时完成场景的创建、更新、数据提交等,具体声明如下:

  class GameState : public MouseListener, public KeyboardListener, public JoystickListener
    {
    public:
        virtual ~GameState() {}


        virtual void initialize(void) {}
        virtual void deinitialize(void) {}


        virtual void createScene01(void) {}
        virtual void createScene02(void) {}


        virtual void destroyScene(void) {}


        virtual void update( float timeSinceLast ) {}
        virtual void finishFrameParallel(void) {}
        virtual void finishFrame(void) {}
    };



程序入口函数:

WinMainApp( HINSTANCE hInst, HINSTANCE hPrevInstance, LPSTR strCmdLine, INT nCmdShow )

{
    GameState gameState;  
    MyGraphicsSystem graphicsSystem( &gameState );


    graphicsSystem.initialize( "Tutorial 01: Initialization" );


    if( graphicsSystem.getQuit() )
    {
        graphicsSystem.deinitialize();
        return 0; //User cancelled config
    }


    Ogre::RenderWindow *renderWindow = graphicsSystem.getRenderWindow();


   // 创建场景
    graphicsSystem.createScene01();
    graphicsSystem.createScene02();


  // 计时器
    Ogre::Timer timer;
    unsigned long startTime = timer.getMicroseconds();


    double timeSinceLast = 1.0 / 60.0;


 // 渲染循环
    while( !graphicsSystem.getQuit() )
    {
        graphicsSystem.beginFrameParallel();
        graphicsSystem.update( static_cast<float>( timeSinceLast ) );
        graphicsSystem.finishFrameParallel();
        graphicsSystem.finishFrame();


        if( !renderWindow->isVisible() )
        {
            //Don't burn CPU cycles unnecessary when we're minimized.
            Ogre::Threads::Sleep( 500 );
        }


        unsigned long endTime = timer.getMicroseconds();
        timeSinceLast = (endTime - startTime) / 1000000.0;
        timeSinceLast = std::min( 1.0, timeSinceLast ); //Prevent from going haywire.
        startTime = endTime;
    }


  // 销毁资源
    graphicsSystem.destroyScene();
    graphicsSystem.deinitialize();


    return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值