OGRE地形配置文件解析

    既然你已經做出決定要使用地形場景管理器,那麼下面介紹的一些東西是你需要知道的。

場景中地形的形狀和着色是由高度圖、地形紋理和地形細節紋理共同計算而得的。高度圖是一張簡單的灰階圖,其中每個像素點代表一個高度值,0代表這個地形的地面,255代表最高點。例子中有一個叫做terrain.png的高度圖,可以供大家實驗用。

    一張紋理圖伸展開來覆蓋整個兒地形。紋理圖一般都是棕、綠、白或灰間雜的顏色,對應土地、草地、雪地或者岩石地形。因爲地形紋理一般比要覆蓋的地形小得多,故而當你距離很近地觀察它時,地形一般會看起來比較模糊。爲了幫助改善這一點,在近距離觀察時,就要用到細節紋理,與地形紋理混合使用。細節紋理並不像地形紋理那樣伸展得那麼大,僅僅是減弱了近距離觀察時產生的地形模糊現象。例子中的terrain_texture.jpg以及 terrain_detail.jpg這兩個紋理可供實驗使用。

    一個地形被分割爲一小塊兒一小塊兒的像地磚一樣的地形方塊兒,由場景管理器按這些地形塊兒的拓撲結構和觀察者的距離依照不同的細節層次進行顯示。

    最後,用一個指定了地形維度的世界座標空間,將完整的地形投影到一個三維空間中。

目錄
1 配置參數
1.1 基本配置參數
1.2 高級配置參數
1.3 更多高級參數
2 使用自定義材質


配置參數
地形場景管理器通過terrain.cfg腳本進行配置。


基本配置參數
這個腳本中的基本參數有:

WorldTexture:指定地形紋理文件的名字。
DetailTexture:指定細節紋理文件的名字。
DetailTile:指定細節紋理在每個地形塊兒上重複的次數。例如,如果值爲n,那麼細節紋理在每個地形塊兒中將會以nxn個網格的形式被顯示出來。設置這個參數可能需要做一些實驗。如果數值設低了,地形可能在近距離觀察時會看起來很模糊。如果數值設得太高,地形可能出現距離很遠時仍然不斷重複匹配圖案。
PageSource:指定高度圖的源。默認設置是Heightmap。
Heightmap.image:繪製高度圖的圖像文件。因此必須是一個邊長爲2^n+1(2的n次方+1)的正方形,n位整數。高度圖越大,地形就越詳細,但是同時你的程序所耗費的資源也相應越多。(包括程序的啓動時間更長。)
PageSize:地形最終會有PageSize x PageSize個頂點。PageSize必須與高度圖的邊長數值相同,即此數值也是2^n+1,n爲整數。
TileSize:地形磚有TileSize x TileSize個頂點。這個數值必須小於PageSize。TileSize的值也必須滿足2^n+1,n爲整數。地形磚的大小設置得太小嚴重影響效果,而設置得太大會導致場景中某些部分使用不必要地過高細節,浪費資源。
MaxPixelError:當決定使用LOD時,這一參數指定最大容錯值。這個值設得過高會導致地形有接縫。設置得過低會影響效果。
PageWorldX, PageWorldZ:設置在世界座標系下的地形擴展。地形越大,地形的細節就越低,因爲用於地形的頂點數是基於高度圖的,而不是世界的大小。這可以被用來將地形伸縮成你想要的大小。
MaxHeight:世界座標系下,地形的最大高度。高度圖0到255的範圍,伸縮成世界座標系下0到MaxHeight。
MaxMipMapLevel:指定渲染地形時用到的細節層次數。距離較遠的地形和相對平坦的地形可以使用較低細節渲染。

高級配置參數
一些高度圖生成器將數據保存爲原(raw)格式而不是圖像(image)格式。下面這些參數就是描述原格式的。

Heightmap.raw.size:指定高度圖一邊的長度。值必須是2^n+1,且n爲整數。
Heightmap.raw.bpp:指定文件中每像素是用多少字節表示的。例如,1=8 bits,2=16 bits。
Heightmap.flip:當設置爲true,翻轉高度圖。Required for Terragen heightmaps.
以下參數控制場景管理器的其他操作。

VertexNormals:這個參數讓TerrainSceneManager在硬件緩衝區中計算並設置頂點法向。如果使用光照或者需要它的GPU程序,應當打開這個參數。
VertexColours:這個參數讓TerrainSceneManager在硬件緩衝區中計算並設置頂點顏色。如果你用到了需要這個信息的GPU程序,就要打開這個參數。
UseTriStrips:當設置爲yes,則優化地形三角形送入GPU的順序,以便送入較少的頂點。(雖然對於大多數新款顯卡來說,幀率沒什麼變化)。因爲在某些顯卡上可能會導致“裂縫”產生,並且很少甚至沒什麼性能提升,所以建議還是關掉好。
VertexProgramMorph:如果可以的話,使用定點程序變形LODs。
LODMorphStart:LOD變形開始起效的相應距離範圍。這是當前LODs作用範圍和下一個更低級別的LOD作用範圍之間的距離的一個比例。

更多高級參數
不使用地形紋理和細節紋理渲染地形,你可以給出你自己的渲染方式,特別是用你自己的材質。典型用法就是在材質中提供你自己的頂點程序。

MorphLODFactorParamName:如果VertexProgramMorph設置爲yes並且你的自定義材質中包含有一個高級頂點程序,那麼使用這個選項。這個參數指定了你想要綁定變形LOD的頂點程序參數名。參數範圍時是到1。0(最高)表示沒有調整,1 表示完全由變形控制作爲下一個低級LOD的同一點。
MorphLODFactorParamIndex:如果VertexProgramMorph設置爲yes並且你的自定義材質中包含有一個彙編級的頂點程序,那麼使用這個選項。這個選項代表了你想要綁定變形LOD因子的頂點程序參數的索引。參數範圍是0到1。0(最高)表示沒有調整,1表示完全由變形控制作爲下一個低級LOD的同一點。
CustomMaterialName:要定義渲染地形的材質名。

使用自定義材質
你可以使用自定義材質渲染你的地形。如果你的材質包括頂點程序,以下的參數是可以使用的:

位置(positions)
兩個紋理座標集合(0號是世界紋理,1號是細節紋理)
法線,如果啓用的話
每頂點delta值,爲將一個高一級的LOD變形爲低一級的LOD地磚。這是一個像'blend weight'一樣的每個頂點都有的浮點數。如果你想使用這個參數,你也必須提供你想接收變形因子的參數的名字或者索引號。
      setWorldGeometry()有重載形式,一種用於加載配置文件,另一種我們可在程序中使用,以
達到手工加載的功能。這裏,SceneData被 typedef 爲std:map,它存儲瞭如我們在terrain.cfg
中看到那些值對。假設我們已經從某個二進制文件讀入我們想要的內容到SceneData中。我們要做
的就是把讀入的內容轉換成setWorldGeometry()需要的類型。

 

本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/pizi0475/archive/2010/02/23/5319790.aspx

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