ogre2.1学习(一)Sample_Tutorial01_Initialization
来源:互联网 发布:轻量级linux安装详解 编辑:程序博客网 时间:2024/05/19 17:07
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;
}
- ogre2.1学习(一)Sample_Tutorial01_Initialization
- Ogre2.1 分析笔记(一)
- Ogre2.1 分析笔记(四) 渲染流程(一)
- Ogre2.1 分析笔记(二)-程序启动流程
- Ogre2.1 分析笔记(三)-场景图结构
- Ogre2.1 灯光与阴影
- Ogre2.1 结合OpenGL3+高效渲染
- Ogre2.1 Hlms与渲染流程
- Ogre2.1相机移动会有卡顿,摘自天天不在博文
- Ogre2.1 分析笔记(五) 渲染流程(二)
- Ogre2.1 分析笔记(六) 合成器脚本分析
- Ogre2.1 分析笔记(七) 材质脚本分析
- Ogre2.1 分析笔记(八) 实现天空盒
- 学习机器学习(一)
- 迁移学习学习(一)
- 学习Java6(一) WebServices (1)服务端
- restlet2.1 学习笔记(一) 入门
- lua语言的学习(一.1)
- JAVA&Adroid多线程实现
- 【安卓】安卓App开发思路 一步一个脚印(五)多点触碰与单点触碰的冲突处理思路
- 银行家问题
- Python做科学计算---matplotlib
- 访问外网 ML2 的配置 - 每天5分钟玩转 OpenStack(103)
- ogre2.1学习(一)Sample_Tutorial01_Initialization
- selenium进阶2
- 机器学习资源汇总(持续更新)
- 10.模型
- 总结HashMap 和HashTable的区别
- hdu1059_Dividing
- hiho一下第三十周 #1114 小Hi小Ho的惊天大作战:扫雷·一【枚举】
- Ubuntu16.04 Redis的安装及设置redis开机启动
- 手机号的接口(自己写)