原文地址:http://www.ogre3d.org/tikiwiki/tiki-index.php?page=Basic+Tutorial+6&structure=Tutorials

1. Ogre的基本生命周期如下:

(1) 创建Root对象

(2) 定义Ogre将要使用的资源

(3) 选择并且设置渲染系统(就是DirectX, OpenGL等等)

(4) 创建渲染窗口

(5) 初始化将要使用的资源

(6) 使用资源创建一个场景

(7) 设置第三方库和插件

(8) 创建任意数量的帧监听(frame listeners)

(9) 启动渲染循环

Note:第一步到第四步应该按顺序执行。第五步和第六步如果你喜欢也可以放在之后执行。第七步和第八步可以在第五步和第六步之前执行,但是不应该在第四步之前执行。此外,帧监听或第三方库在资源未初始化并且场景未创建之前不能访问任何游戏相关的资源(例如摄像机,实体对象等)。

2. 如果你喜欢可以自由的使用任意的解析工具和配置文件格式来替代Ogre的ConfigFile解析工具,这对于加载资源没有影响,只要保证把解析的资源添加到ResourceGroupManager由其来加载就可以了。

3. 可以使用Root::getAvailableRenderers()来获取所有可用的RenderSystems。一旦获取到一个RenderSystem,就可以使用RenderSystem::getConfigOptions来获取所有可用的选项,下图展示了Direct3D9 Rendering Subsystem所具有的可用选项:

4. 可以通过Root::initialize()函数并将第一个参数设置为true来通知Ogre帮你自动创建RenderWindow。另外也可以使用win32 API, wxWidgets或任意的GUI系统来自己创建窗口,然后取得窗口句柄,之后使用NameValuePairList并将窗口句柄赋值给"externalWindowHandle",最后调用Root::CreateRenderWindow()函数来创建RenderWindow:

 mRoot->initialise( false ); // 初始化RenderSystem,第一个参数传递false来通知Ogre无须为我们自动创建RenderWindow

 HWND hWnd = ; // 获取我们自己创建的窗口句柄
NameValuePairList misc;
misc["externalWindowHandle"] = StringConverter::toString( (int)hWnd );
RenderWindow *win = mRoot->createRenderWindow( "Main RenderWindow", , , false, &misc );

5. 在初始化资源之前,应该设置纹理使用的mipmap数量,要注意必须在初始化资源之前设置,否则不会起效。

6. 在使用OIS初始化鼠标之后,会发现窗口的光标消失了。在OIS的初始化源代码中,我们可以发现鼠标被设置为独占模式:

根据MSDN,可以发现如下说明:If the system mouse is acquired in exclusive mode, the pointer is removed from the screen until the device is unacquired。因此,在独占模式下,光标是看不到的。所以,在使用OIS初始化鼠标的代码中,我加入了两行代码,将鼠标设置为非独占模式:

 OIS::ParamList paramList;
paramList.insert( std::make_pair(std::string("WINDOW"), strWindowHandle.str()) );
paramList.insert( std::make_pair(std::string("w32_mouse"), std::string("DISCL_FOREGROUND")) );
paramList.insert( std::make_pair(std::string("w32_mouse"), std::string("DISCL_NONEXCLUSIVE")) ); m_pInputManager = OIS::InputManager::createInputSystem( paramList );
m_pMouse = dynamic_cast<OIS::Mouse*>( m_pInputManager->createInputObject(OIS::OISMouse, false) );

这样就可以看到光标了。

Ogre1.8.1 Basic Tutorial 6 - The Ogre Startup Sequence的更多相关文章

  1. Ogre学习笔记Basic Tutorial 前四课总结

    转自:http://blog.csdn.net/yanonsoftware/article/details/1011195 OGRE Homepage:http://www.ogre3d.org/   ...

  2. [转]Open Data Protocol (OData) Basic Tutorial

    本文转自:http://www.odata.org/getting-started/basic-tutorial/ Basic Tutorial The Open Data Protocol (ODa ...

  3. [cmake] Basic Tutorial

    Basic Project The most basic porject is an executable built from source code file. CMakeLists.txt cm ...

  4. OGRE启动过程详解(OGRE HelloWorld程序原理解析)

    本文介绍 OGRE 3D 1.9 程序的启动过程,即从程序启动到3D图形呈现,背后有哪些OGRE相关的代码被执行.会涉及的OGRE类包括: Root RenderSystem RenderWindow ...

  5. Ogre学习教程:Ogre1.8.1+VS2010环境配置(转)

    http://blog.csdn.net/yangtrees/article/details/8724120 http://blog.csdn.net/cll611/article/details/8 ...

  6. 【转载】Ogre:Beginner Tutorial 1: SceneNode, Entity,和SceneManager 结构

    原文:Beginner Tutorial 1: SceneNode, Entity,和SceneManager 结构   先决条件 这个教程假设你有C++编程的基础并且可以配置并编译OGRE应用程序 ...

  7. OGRE 1.9 的第一个程序(OGRE HelloWorld程序)

    平台:win7, VS2010 先看运行结果吧: 1. 安装OGRE 下载OGRE SDK 1.9,解压,放在你喜欢的地方,在OGRE SDK文件加下创建“OGRE_HOME.bat.bat”文本文件 ...

  8. Mule ESB-Content-Based Routing Tutorial(2)

    承接 Mule ESB-Content-Based Routing Tutorial(1) 五.执行应用程序  完毕创建,配置.并保存你的新的应用程序,您就能够在嵌入Mule的server上执行(包含 ...

  9. Deep Learning Tutorial - Classifying MNIST digits using Logistic Regression

    Deep Learning Tutorial 由 Montreal大学的LISA实验室所作,基于Theano的深度学习材料.Theano是一个python库,使得写深度模型更容易些,也可以在GPU上训 ...

随机推荐

  1. Linux shell用法和技巧(转)

    原文出处: techbar   译文出处: 外刊IT评论 使用Linux shell是我每天的基本工作,但我经常会忘记一些有用的shell命令和技巧.当然,命令我能记住,但我不敢说能记得如何用它执行某 ...

  2. 实战Django:官方实例Part3

    前面两个部分我们介绍了投票应用的框架和后台管理部分.接下来舍得要介绍这个应用面向用户的界面. 这里我们要引入一个新的概念,"视图".在Django中,视图是一根连接模型和模板的纽带 ...

  3. 命令行工具cmder

    1.下载地址 http://bliker.github.io/cmder/ 分为两个版本:mini版和Full版 2.快捷命令配置: 比如,快速启动canssandra/redis数据库服务和查询工具 ...

  4. Virtual Box + CentOS Minimal + Apache搭建Web服务器

    本文并不介绍关于Virtual Box, CentOS, Apache的安装, 主要针对安装后相关的配置, 使宿主机(Host)可以访问客户机(Guest: CentOS in Virtual Box ...

  5. Thread与Runable

    当我们继承Thread的时候可以看出. 调用run()与start()来启动多线程是有区别. 如下我们开启多线程时 MyThread  mt1 = new MyThread(“线程A”); MyThr ...

  6. Zygote(app_process)相关分析2

    在前一篇文章中已经分析了从init.c到Zygote(app_process)的启动流程. 今天开始分析frameworks/base/cmds/app_process/app_main.cpp. s ...

  7. hdu 1277 全文检索

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1277 全文检索 Description 我们大家经常用google检索信息,但是检索信息的程序是很困难 ...

  8. EF6 在原有数据库中使用 CodeFirst 总复习(四、新建实体对象)

    在原有数据库中使用 CodeFirst ,除了第一次添加实体后要立即执行一次 Enable-Migrations add-migration Initial  -IgnoreChanges updat ...

  9. DHCP Server软件使用教程

    DHCP Server软件使用教程 前提网络环境配置 电脑连接上wifi 网络和共享中心中更改适配器,共享无线网卡给以太网网卡 手动设置以太网网卡ipv4地址为192.168.1.1,子网掩码为255 ...

  10. Java Day 16

    基本数据类型包装类 Integer.MAX_VALUE  Integer.parseInt(); intValue(); valueOf(); 自动装拆箱 如果是一个字节范围,数据共享 字符串中 数值 ...