OGRE架构(转)

  • Root:是ORGE核心系统的一部分,必须在所有ORGE对象产生之前初始化,并在所有ORGE对象销毁之后销毁,用来配置系统。
  • RenderSystem:是用来发送渲染操作的系统。它是一个抽象类,而另外拥有不同的实现。(OpenGL, DirectX)
  • SceneManager:除Root对象外最重要的ORGE部件。它创建和管理摄象机,可移动物体,灯光和材质,以及不可移动的场景的材质(如天空,大地)SceneManager保存了各种物体的列表,以便处理物体之间的关系。应用程序无须为之操心。SceneManager还把场景发送到RenderSystem里进行渲染。它确定哪些物体需要绘制,生成一个场景,发送到渲染系统。SceneManager拥有许多子类,因为如何选择物体进行渲染的算法十分多样。缺省的SceneManager功能十分低下,而某些SceneManager子类功能十分强大。例如:BSP(Binary Space Partition)SceneManager处理一个大型建筑。
  • ResourceManager:是一些管理资源的类的基类。“资源”指的是贴图,mesh和地图。TextureManager是管理贴图的ResourceManagerMeshManager是管理meshResourceManger
  • Mesh对象

    Mesh对象表示出一种不连续的模型,一组自包含的远小于世界尺寸的几何物体。Mesh对象通常用来表现可移动的小型物体,而不是不可移动的背景。
    Mesh是一种资源,可被MeshManager管理。它们通常被保存在文件里,以”.mesh”为扩展名。”.mesh”文件可以通过一个建模工具。
    MeshManager::createManual方法可以创建一个Mesh。

    Entity对象

    Entity是场景的一个可移动物体的实例。它可以是车,人,狗等等。它不必固定在一个位置上。
    Entity是不连续的Mesh的集合。多个Entity也可以由同一个Mesh所构成,如果你希望的话。
    使用SceneManager::createEntity方法可创建一个Entity,参数为它的名字和它所使用的Mesh的文件名。通过MeshManager,我们能保证同一个Mesh只装载一次。
    Entity如不加入到SceneNode中,就不认为它是场景的一部分。通过加入SceneNode,Entity能表现出复杂的继承行为。可以通过修改SceneNode的位置来影响一组Entity。
    一个Mesh带来一组材质的定义。你可以在原来基础上改变Mesh的材质,因为每个Mesh由子Mesh单元组成。子Mesh单元分别存储着Mesh的各种材质。通过更换子Mesh,就可以改变原有Mesh的外观。
    Entity也是如此,通过更换子Entity,也可改变原有Entity的外观。

    Materials对象

    材质对象控制物体在渲染系统中如何显示,它包括颜色,亮度等等。SceneManager管理所有的材质。当每个材质被加入到SceneManager时,它们都有一系统缺省属性。
    •  周围的反射光(白色)
    •  漫反射(白色)
    •  emmissive(黑色:无)
    •  亮度(无)
    •  没有贴图层,也就没有贴图
    •  SourceBlendFactor = SBF_ONE, DestBlendFactor = SBF_ZERO (不透明)
    •  开启深度缓冲检查
    •  开启深度缓冲写
    •  深度缓冲比较 = CMPF_LESS_EQUAL
    •  周围光线颜色 = ColourValue(0.5, 0.5, 0.5) (半灰)
    •  开启动态光线
    •  Gourad 阴影模式
    •  Bilinear texture filtering

    通过对SceneManager::getDefaultMaterialSettings()的返回值进行更改,可以改变这些缺省值。使用方法SubEntity::setMaterialName()创建一个新的材质,再把一个新的子Entity连接上去。

    Overlays

    Overlays是用来显示HUD的,如HP血槽。它可以是2维或3维形式。2维的用于显示HUD,3维的可用来表示特殊效果如雨雪等。用 SceneManager::createOverlay方法可以创建两种overlay。你也可用”.overlay”脚本定义它们。 Overlay::setZOrder()方法决定了多个overlay的前后顺序。
    •  创建2维overlay
    •  使用OverlayElement类。
    •  使用OverlayContainer,后者是前者的容器。
    •  使用GuiManager类,使用GuiManager::createOverlayElement方法创建一2维元素到一个overlay。
    •  例子:GuiManager::getSingleton().createOverlayElement("Panel", "myNewPanel");
posted @ 2011-12-12 22:16  ☆A希亿  阅读(1172)  评论(0编辑  收藏  举报