关闭

OGRE的启动

标签: Ogre C++
720人阅读 评论(0) 收藏 举报
分类:
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<SettingsBySection> 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<OIS::Keyboard *>(mInputManager->createInputObject(OIS::Keyboard, false));
        mMouse = static_case<OIS::Mouse *>(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. 程序结束
        调用析构函数,释放资源;
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:39640次
    • 积分:555
    • 等级:
    • 排名:千里之外
    • 原创:13篇
    • 转载:7篇
    • 译文:0篇
    • 评论:34条
    文章分类
    最新评论