1. 使用了三个头文件:“OgreReferenceAppLayer.h”、“ExampleRefAppApplication.h”、“OgreStringConverter.h”。
ExampleRefAppApplication 有相关程序是用的基类ExampleRefAppApplication。
ExampleRefAppApplication相对于ExampleApplication不同的地方有以下几点:
1) 增加了成员变量: OgreRefApp::World* mWorld;
2) 增加了成员函数: virtual void createWorld(void);
函数内容只有一句: mWorld = new World(mSceneMgr);
3) 场景管理器名称为: RefAppSMInstance, 类型仍为 ST_GENERIC
4) 相机为 CollideCamera* mCamera;
监听的基类 ExampleRefAppFrameListener 与ExampleFrameListener的区别如下:
1) ExampleRefAppFrameListener继承的基类只有FrameListener, 没有 WindowEventListener
2) frameEnded方法增下以下代码:
World::getSingleton().simulationStep(evt.timeSinceLastFrame);
用于实现碰撞或一些物理环境
2. 这里使用了 OgreRefApp::ApplicationObject 类, 继承自 Ogre::UserDefinedObject, 拥有子类Ball, Box, CollideCamera, FinitePlane, OgreHead.
这个对象是所有应用程序中离散对象的基类
要点: 这个对象关联到Ogre的实体, 并给予这些对象额外的属性, 使其能够运行于应用程序的世界
该对象扩展了OGRE的UserDefinedObject, 使得从Ogre::Entity返回链接。 注意由于UserDefinedObject是抽象类, 所以并没有重写UserDefinedObject的getTypeId方法。
3. mWorld = new World(mSceneMgr, WT_REFAPP_BSP);
该构造函数的第二个参数有两个选择: WT_REFAPP_GENERIC, WT_REFAPP_BSP
4. 该例使用了一个库 ReferenceAppLayer_d.lib
5. 设置了场景管理器的阴影技术 mSceneMgr->setShadowTechnique(SHADOWTYPE_STENCIL_MODULATIVE);
6. 可以看到Demo_BSP和Demo_BspCollision两个程序加载世界地图的不同方式。
BSP程序中是将世界地图以ZIP类型格式加入资源组位置, 具体方法为addResourceLocation, 而后在初始化资源的时候调用loadResourceGroup函数
在BspCollision程序中, 调用OgreRefApp::World所属的场景管理器调用setWorldGeometry方法来加载地图
mWorld->setGravity(Vector3(0, 0, -60)); // 可以设置设个世界的重力
mWorld->getSceneManager()->setWorldGeometry("ogretestmap.bsp");
7. OgreRefApp::World的createBall和createBox方法可以创建OgreRefApp::ApplicationObject对象
8. OgreRefApp::ApplicationObject的 virtual void setDynamicsEnabled (bool enabled, bool reEnableOnInteraction=false)方法
用于设置该对象是否进行物理模拟
9. mCamera->setCollisionEnabled(true); 等同于函数 setDynamicsEnabled
10. TextureUnitStat::setColourOperationEx 方法用于设置纹理单元的颜色操作
11. virtual void Ogre::SceneQuery::setWorldFragmentType ( enum WorldFragmentType wft ) [virtual]
用于设置查询返回哪种结果。
SceneQuery::WFT_SINGLE_INTERSECTION 表示返回一个单独的交叉点
12. 程序中的targetEnt以及光线查询是用了设置红色的准星。
13. 该例物理环境建立的步骤:
1) 需要 OgreReferenceAppLayer.h头文件, ExampleRefAppApplication.h头文件
2) 应用程序类和监听类分别派生自 ExampleRefAppApplication和ExampleRefAppFrameListener
3) 如果有需要重载createWorld()函数, 设置地图类型
4) 设置mWorld变量的重力参数以及地图
5) 从mWorld创建世界的各个对象
5) 各个对象可以设置速度, 角速度, 位置, 是否需要物理模拟等等参数