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");
  • 引自:http://bbs.gamedev.csdn.net/Web/54201/ShowPost.aspx

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章