terrain.cfg檔案包含了許多產生地面的選項,和以往一樣,我只會講一些基礎的東西,更詳細的內容可以在/*這裡*/找到。需要注意的是,地面情境管理器設計的時候包含了分頁的功能,只不過還沒有被實現。不過OGRE有一個外掛程式目前可以實現這個功能:Paging Scene Manager。
地面情境管理器使用高度圖(Heightmap)來產生地面。你可以通過更改Heightmap.image的參數來改變高度圖。你可以通過更改WorldTexture來更改地面的帖圖。你還可以通過更改DetailTexture來使地面看得更逼真。你可以在/Media/materials/textures裡找到terrain.cfg預設的幾個圖片。
在情境中地形的形狀和染色從一張高度圖,一張地形紋理和一張細節貼圖中被計算出來。高度圖是一張灰階圖,每個象素表現一個高度值,0表示地平面,255表示地形最高點。
地形上面覆蓋的的那層紋理被展開。這些地形紋理具有代表性的是斑駁的褐色,綠色,白色或者灰色適合於地表,草,雪或岩石地形。地形紋理通常比要覆蓋地形小的多,所以近看時通常很模糊。為瞭解決這個問題,使用了一張細節紋理,當近看時混合地形紋理。細節紋理沒有被展開,消除了近看模糊問題。
地形被分成一個地形小塊表格。地形小塊可能在不同的細節層次被情境管理器顯示出來,依賴於小塊的布局和離觀察者的距離。整個地形被投射到一個全局座標空間中,在裡面地形的尺寸。
地形情境管理器通過terrain.cfg指令碼被設定。
1. WorldTexture: 指定地形紋理的名稱。
2. DetailTexture: 指定細節紋理的名稱。
3. DetailTile: 這個指定細節紋理在每個地形小塊中重複次數,也就是說,如果這個值是n,細節紋理將在每個地形小塊的n*n格中被顯示。如果這個值設定過低,地形在近看時會模糊,反之則會在放眼觀察時看起來有反覆模式(露餡了,^_^) 。
4. PageSource: 指定高度圖資料的來源,預設為Heightmap.
5. Heightmap.image: 指定高度圖的名稱。尺寸必須是方形,而且要符合2^n+1, 高度圖越大,地形細節就越高,但是程式消耗的的資源也越多(包括程式啟動時間)。
6. PageSize: 地形將會有PageSize * PageSize那麼大。如上所述,必須要符合2^n+1 (如65,129,257,513,1025)。
7. TileSize: 地形小塊有 TileSize * TileSize大小。這個數必須小於PageSize。這個數必須要符合2^n+1須要符合2^n+1。設的過小會嚴重影響效能,太大的話又會在情境的某些部分導致不必要的高細節。
8. MaxPixelError: 指定當決定哪個細節層次被使用時的最大允許誤差。設定過高會導致地形撕裂,過低則會影響效能。
9. PageWorldX, PageWorldZ: 設定地形在全局座標系中的範圍,地形越大,細節越低,地形使用的頂點數基於高度圖,不是世界大小,你可以縮放地形到你想要的任意大小。
10. MaxHeight: 在全局座標系中地形的最大高度。高度圖中的0..255 縮放到全局座標系中的 0..MaxHeight。
11. MaxMipMapLevel: 指定渲染地形使用的細節層次的數目。地形的遠處和平坦處會以低細節渲染。
Advanced Configuration Parameters
有些高度圖儲存為raw格式,下列參數描述raw格式。
12. Heightmap.raw.size: 指定高度圖的尺寸,要求同上。
13. Heightmap.raw.bpp: 指定每象素位元組數,1=8 bits, 2=16 bits。
14. Heightmap.flip: 如果設定為true,則翻轉高度圖。
高度圖處理說明
高度圖必須是灰階圖,如果不是,可以使用photoshop處理,選擇菜單【映像】->模式->灰階,然後存為png格式即可。
座標系問題
Terrain Scene Manager把紋理圖的左上方作為世界原點(0,0,0),以從左至右為x正方向,從上到下為z正方向,從螢幕裡到螢幕外為y正方向,符合右手座標系。