Ogre 启动过程,创建自己的游戏框架
1. 编译链接配置
在ubuntu环境下,添加编译include路径地址:/usr/include/OGRE,/usr/include/OIS;添加链接库:-lOgreMain, -lOIS;
2. 程序头文件
包含必须的头文件:Ogre.h, OIS.h;
3. 创建Root对象
mRoot = new Root(mPluginConfig, mOgreConfig, mLogConfig);
共有三个参数:Plugin配置文件名称,Ogre配置文件名称,日志文件名称
默认值分别为:plugins.cfg,ogre.cfg,Ogre.log
如上述什均不作修改,也可以忽略,如mRoot = new Root();
4. 解析资源文件resource.cfg
ConfigFile cf.load("resouces.cfg");
创建ConfigFile对象,调用其load()加载资源文件;并用SectionIterator迭代器遍历所有资源条目;
其中,typedef MapIterator SectionIterator;
ResourceGroupManager::getSingleton().addResourceLocation(archName, typeName, resName);
把每一项资源解析出来的资源位置,类型,资源名称作为参数,调用上述addResourceLocation加入资源组管理器;
5. 创建渲染系统
if (!mRoot->restoreConfig() && !mRoot->showConfigDialog()) return false;
上面语句首先尝试恢复设置,如果失败再显示对话框让用户选择新的配置,来创建新设置;
如果恢复和创建设置操作都失败了,就退出程序,也可以抛出异常;
6. 创建渲染窗口
mRoot->initialise(true, "Ogre Render Window");
此初始化函数创建一个RenderWindow,它有三个参数:是否自动创建窗口,窗口的标题,和自定义显示内容;最后一个参数默认为StringUtil::BLANK,表示一个空窗口;
7. 初始化资源
TextureManager::getSingleton().setDefaultNumMipmaps(5);
设置mipmap,这是一种电脑图形图像技术,用于在三维图像的二维代替物中达到立体感效;
ResourceGroupManager::getSingleton().initialiseAllResourceGroups();
初始化所有的资源组;
8. 设置输入设备处理(OIS)
首先配置InputManager,比较难配置;
mKeyboard = static_case(mInputManager->createInputObject(OIS::Keyboard, false));
mMouse = static_case(mInputManager->createInputObject(OIS::Mouse, false));
使用InputManager对象,分别创建键盘和鼠标设备;
9. 创建场景管理器
mSceneMgr = mRoot->createSceneManager(ST_GENERIC, "ogre scene manager");
通过Root对象创建场景管理器,类型选择ST_GENERIC,其它类型还有:ST_EXTERIOR_CLOSE, ST_EXTERIOR_FAR, ST_EXTERIOR_REAL_FAR, ST_INTERIOR。
10. 创建默认的Camera和Viewport
mCamera = mSceneMgr->createCamera("Default Camera");
mViewport = mRoot->getAutoCreatedWindow()->addViewport(mCamera);
上述语句分别创建默认的Camera和Viewport,并把Camera绑定到Viewport;它们的创建分别在不同的函数中实现,以方便继承类的重写;
11. 调用createScene
编写自己的游戏,添加布局;
12. 设置帧监听器
FrameListener监听器实现对所有帧事件的监听,主类可以选择继承该监听器类,或者创建一个新的监听器类;
mRoot->addFrameListener(this);
bool StartOgre::frameRenderingQueued(const FrameEvent &evt);
调用函数把监听器加入mRoot,并实现每帧渲染队列方法,它在渲染命令下达之后,窗口准备刷新缓存之前调用;
可以在此方法里实现键盘事件处理、鼠标事件处理、或其它逻辑的控制;
13. 开始渲染
mRoot->startRendering();
程序就开始渲染,直到帧监听器返回false
14. 程序结束
调用析构函数,释放资源;
阅读(2560) | 评论(0) | 转发(0) |