3D图形编程

学无止尽

  C++博客 :: 首页 :: 联系 :: 聚合  :: 管理
  4 Posts :: 46 Stories :: 2 Comments :: 0 Trackbacks

常用链接

留言簿(2)

搜索

  •  

最新评论

阅读排行榜

评论排行榜

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) 各个对象可以设置速度, 角速度, 位置, 是否需要物理模拟等等参数
posted on 2011-12-08 10:07 Nightsky 阅读(234) 评论(0)  编辑 收藏 引用 所属分类: OgreDEMO

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理