因爲工做須要,花費了一段時間研究OGRE,可是研究的目的是要在vs2010平臺下用c#進行MOGRE的開發,不得已才轉到MGRE,步驟是首選熟悉MOGRE的一些基礎知識,作到在winform下能用MOGRE單獨開發項目,最終的目的不只限於此,而是構建一個MOGRE和physx結合的一個開發平臺,以便在此基礎上可以運用vs和.net快速的開發項目。ogre是在c++環境下開發的,而mogre幾乎徹底是由c++語言轉換爲c#的結果。此處,首先介紹ogre是什麼,你們爲何會用到它。c++
OGRE(Object-Oriented Graphics Rendering Engine,即:面向對象圖形渲染引擎)是一個用C++開發的面向場景、很是靈活的3D引擎,它旨在讓開發人員更容易、更直接地利用硬件加速的3D圖形系統開發應用。它的類庫隱藏了底層系統庫(如:Direct3D和OpenGL)的全部細節,提供了一個基於世界對象和其餘直觀類的接口。有人會說ogre是一個遊戲開發引擎,這裏明確回答不是。OGRE能被用於開發遊戲,可是OGRE被設計成一個只提供世界級的圖形解決方案;對於其餘的特性,如:音效、網絡、人工智能、碰撞檢測、物理等子系統,你則須要將其整合到OGRE中,在這些子系統中,已有一些成熟的庫可供選擇。而本人在此處也是寄但願與mogre與physx完美融合。redis
OGRE亮眼之處:場景圖和場景內容的分離。是由於:算法
在傳統設計中,將場景內容和場景結構放到一個繼承體系中,並將場景內容生硬的做爲場景節點的子類,這是一個極其失敗的設計方案。若是不修改全部的子類,基本上是沒有辦法更改或者擴充圖形算法的,所以讓修改基類的接口很是困難,進而致使之後的維護工做變得舉步維艱。此外這種「全部節點源自同一節點類型」的設計思想會讓整個程序變得凝固且難以複用(至少從維護的觀點看):當增長新的基類功能方法或者屬性的時候,不論是否真的須要,這些都強迫的塞入全部子類。最後致使哪怕是對基本功能作很小的修改,都會牽一髮會動全身, 致使開發維護最終變得難與控制。c#
Ogre對場景圖的操做維持在接口級別;它並不關心去操做圖形的具體算法實現。換言之,Ogre只是經過信號(它們的方法)來操做場景圖,進而忽略了具體的算法實現。其次,Ogre的場景圖接口只負責維護場景結構。節點中沒有包含任何固有的內容和管理方法。具體的內容被放置到一種可渲染(Renderable)對象之中,它提供了場景中所有幾何圖形(包括活動的的或者其餘全部的)。它們的渲染的屬性(也能夠說是材質)被包含在實體(Entity)對象中,在實體對象裏面一樣包含着一個或多個子實體(SubEntity)對象,這安全
些子實體纔是是真正能夠被渲染對象。它的場景圖和場景關係能夠用下圖表示:網絡
OGRE的一些組成部分:app
資源管理:框架
資源在Ogre中的定義是「全部渲染幾何體到渲染目標的數據所須要的數據」。這不只包含模型,骨骼,材質,還包含表層(Ovelary)腳本和字體,以及有材質處理所須要的一些資源,好比合成器框架腳本、GPU程序和紋理。工具
Ogre同時有手動載入和隱式載入兩種不一樣的載入方法:手動載入指的是在代碼中經過接口來載入相應的資源,其中包括字體和模型這種資源,在須要使用前須要執行一些代碼來載入和初始化。而對於其餘一些資源來講,在載入配置文件的時候就已經被預先載入了,其中包括常用的紋理資源。學習
合成器後處理技術(Compositor Postprocessing)
合成器框架(Compositor framework)是Ogre新加入的一個特性,它容許用戶在視口(Viewport)級別實現全屏的二維後處理(Postprocessing)特效。例如,你能夠把視口中全屏的內容實現的發光或者朦朧處理、黑白渲染、銳化邊緣渲染。任何你能想象的對整個視口的操做均可以在合成器框架中實現。
框架的處理方式極其相似材質腳本系統。其中合成器中的技術(Technique)概念和材質腳本中的渲染技術概念同樣,都是指的達到某種特效所能使用的不一樣方法。合成器中的通路(Pass)也和材質腳本中的渲染通路有相似概念,既在建立視口最後的輸出以前進行的屢次運算或者過濾過程。而且合成器框架也提供了和材質腳本同樣的自動回調技術來保證最終輸出的像素各式可用。
合成器腳本的是針對於視口的操做,這就意味着你能夠把這些特效應用於任何渲染目標,其中包括渲染到紋理,渲染到主窗口或者裏面的子窗口。不論後面是否有已經存在的幾何體,最終的渲染結果都很好的顯示到表層的矩形的視口中。例如你能夠把一些物體渲染在屏幕以外,而後把通過後處理的結果經過渲染到紋理在主屏幕中顯示。
和材質腳本同樣,合成器框架也能夠直接從代碼中直接建立。你能夠在代碼中使用一切能夠在基本中存在的屬性和方法。合成器框架也有同材質腳本同樣的「主題(Scheme)」概念,事實上,合成器框架中的主題操做是經過材質主題來實現的。
Ogre支持動畫方式:骨骼動畫(Skeletal)、變形動畫(Morph)以及姿態動畫(Pose)
骨骼動畫是經過把頂點綁定到骨骼的骨頭(Bone)上來實現的(也被稱爲矩陣調色蒙皮技術,或簡稱爲蒙皮技術)。在物體上的每一個頂點均可以同時被四塊獨立的骨頭影響,影響的具體力度取決於頂點對每塊骨頭分配的權重,當骨骼運動的時候,全部被它影響的頂點都根據骨頭的位置和權重來更新自身的位置。這種算法能夠模擬不少現實的頂點位移,例如能夠很好的模擬在移動的胳膊的時候肩膀的外型的變化(更確切地說,由於當胳膊擡起的時候肩膀相應的肌肉會收縮)。目前Ogre還只能支持關鍵幀形式的正向動力學(FK)骨骼動畫;也就是說沒有提供對逆向動力學(IK)骨骼動畫的內建支持;若是你的美工在3D模型工具中使用了逆向動力學產生相應的動畫,這時候能夠對骨骼每一幀進行採樣來轉換成正向動力學的骨骼動畫。一般來講,這些工做均可以在導出插件中很好的完成
變形動畫與姿態動畫都屬於頂點動畫技術。變形動畫存儲了頂點在每一關鍵幀的絕對位置,而後在運行時對兩個位置進行相應的插值計算,由於多個頂點的絕對位置沒法疊,因此多個變形動畫之間沒法相互混合成新的動畫。而姿態動畫的不一樣之處在於它儲存的是頂點的相對位置,所以多個姿態動畫的軌跡可被混合起來,進而建立出更復雜的頂點動畫。不過上面兩種類型的動畫均可以與骨骼動畫很好的混合使用。
到此,對ogre有了一個大體的認識,如今有點摩拳擦掌的意思,可是在這以前須要配置好mogre運行環境,才能進行mogre的學習。
1下載並安裝
a) VS200八、vs2010安裝上SP1補丁
b) 運行庫 vcredist_x86.exe
c) DirectX
d) Mogre SDK
2 配置環境變量:
控制面板-系統和安全-系統-高級系統設置-系統屬性-環境變量-系統變量,path路徑後面添加
C:\MogreSDK\bin\release;C:\MogreSDK\bin\debug
建立一個Mogre C#程序
a) Plugins.cfg:」PluginFolder=.」修改成」 PluginFolder=C:\MogreSDK\bin\Release」
b) Quake3settings.cfg:」 Pak0Location: ..\..\media\packs\chiropteraDM.pk3 Map: maps/chiropteradm.bsp」修改成」 Pak0Location: C:\MogreSDK\media\packs\chiropteraDM.pk3 Map: maps/chiropteradm.bsp」
c) Resources.cfg:全部的」../..」修改成」C:\MogreSDK」
6在Main()方法中添加代碼便可運行
7 備註:若是是.net 4.0如下,能夠直接運行成功;若是是.net 4.0,則會報錯,解決辦法是添加一個app.config,而後在裏面的configuration中添加子節點
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0"/>
</startup>
對於mogre環境的搭建以及如何建立第一個mogre的c#項目,都要感謝個人同事×××,正是因爲他的努力,少走了不少彎路,在此表示感謝。