MOGRE學習筆記(1) - OGRE簡介及在vs2010下配置

由於工作需要,花費了一段時間研究OGRE,但是研究的目的是要在vs2010平臺下用c#進行MOGRE的開發,不得已才轉到MGRE,步驟是首選熟悉MOGRE的一些基礎知識,做到在winform下能用MOGRE單獨開發項目,最終的目的不僅限於此,而是構建一個MOGRE和physx結合的一個開發平臺,以便在此基礎上能夠運用vs和.net快速的開發項目。ogre是在c++環境下開發的,而mogre幾乎完全是由c++語言轉換爲c#的結果。此處,首先介紹ogre是什麼,大家爲什麼會用到它。

   OGRE(Object-Oriented Graphics Rendering Engine,即:面向對象圖形渲染引擎)是一個用C++開發的面向場景、非常靈活的3D引擎,它旨在讓開發人員更容易、更直接地利用硬件加速的3D圖形系統開發應用。它的類庫隱藏了底層系統庫(如:Direct3D和OpenGL)的所有細節,提供了一個基於世界對象和其他直觀類的接口。有人會說ogre是一個遊戲開發引擎,這裏明確回答不是。OGRE能被用於開發遊戲,但是OGRE被設計成一個只提供世界級的圖形解決方案;對於其他的特性,如:音效、網絡、人工智能、碰撞檢測、物理等子系統,你則需要將其整合到OGRE中,在這些子系統中,已有一些成熟的庫可供選擇。而本人在此處也是寄希望與mogre與physx完美融合。

  

OGRE亮眼之處:場景圖和場景內容的分離。是因爲:

  在傳統設計中,將場景內容和場景結構放到一個繼承體系中,並將場景內容生硬的作爲場景節點的子類,這是一個極其失敗的設計方案。如果不修改所有的子類,基本上是沒有辦法更改或者擴充圖形算法的,因此讓修改基類的接口非常困難,進而導致以後的維護工作變得舉步維艱。此外這種“所有節點源自同一節點類型”的設計思想會讓整個程序變得凝固且難以複用(至少從維護的觀點看):當增加新的基類功能方法或者屬性的時候,不管是否真的需要,這些都強迫的塞入所有子類。最後導致哪怕是對基本功能做很小的修改,都會牽一髮會動全身, 導致開發維護最終變得難與控制。

  Ogre對場景圖的操作維持在接口級別;它並不關心去操作圖形的具體算法實現。換言之,Ogre只是通過信號(它們的方法)來操作場景圖,進而忽略了具體的算法實現。其次,Ogre的場景圖接口只負責維護場景結構。節點中沒有包含任何固有的內容和管理方法。具體的內容被放置到一種可渲染(Renderable)對象之中,它提供了場景中全部幾何圖形(包括活動的的或者其他所有的)。它們的渲染的屬性(也可以說是材質)被包含在實體(Entity)對象中,在實體對象裏面同樣包含着一個或多個子實體(SubEntity)對象,這

些子實體纔是是真正可以被渲染對象。它的場景圖和場景關係可以用下圖表示:

 

OGRE的一些組成部分:

資源管理:

資源在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)         VS2008、vs2010安裝上SP1補丁

b)         運行庫 vcredist_x86.exe

c)         DirectX

d)         Mogre SDK

2 配置環境變量:

控制面板-系統和安全-系統-高級系統設置-系統屬性-環境變量-系統變量,path路徑後面添加

C:\MogreSDK\bin\release;C:\MogreSDK\bin\debug

 

創建一個Mogre C#程序

  1. 新建一個Winform項目
  2. 添加兩個引用(C:\MogreSDK\bin\Release下的Mogre.dll,MogreFramework.dll)
  3. 打開Program.cs,using兩個dll
  4. 拷貝C:\MogreSDK\bin\Release下的所有CFG文件至Winform項目下的bin\Debug、bin\Release文件夾(如果Release文件夾不存在,可以創建一個;或者把項目在Release模式下運行一下,即可生成)
  5. 修改拷貝過來的CFG文件,將其中的相對路徑改爲絕對路徑。涉及到的文件有:

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>

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