Chinaunix首页 | 论坛 | 博客
  • 博客访问: 229360
  • 博文数量: 36
  • 博客积分: 482
  • 博客等级: 下士
  • 技术积分: 290
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-03 12:14
个人简介

Hi-ho, Silver! 在一个商业英雄辈出的年代,让我们用技术做一次华丽的冒险。向Linus致敬,向Stallman致敬!

文章分类

全部博文(36)

文章存档

2013年(24)

2012年(1)

2011年(8)

2010年(3)

我的朋友

分类: C/C++

2011-09-05 15:17:29

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) |
给主人留下些什么吧!~~