zoukankan      html  css  js  c++  java
  • 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");
  • 相关阅读:
    HDU 1969 Pie(二分查找)
    HDU 1896 Stones (优先队列)
    HDU 1548 A strange lift(BFS)
    HDU 1518 Square(DFS)
    CDOJ1085 基爷与加法等式 爆搜DFS
    Codeforces Round #245 (Div. 2) C. Xor-tree DFS
    Codeforces ZeptoLab Code Rush 2015 B. Om Nom and Dark Park DFS
    Codeforces Round #297 (Div. 2)E. Anya and Cubes 折半搜索
    Codeforces Round #401 (Div. 2)A B C
    Codeforces Round #297 (Div. 2)D. Arthur and Walls 搜索bfs
  • 原文地址:https://www.cnblogs.com/wonderKK/p/2285354.html
Copyright © 2011-2022 走看看