OGRE通過配置文件生成地形,極大提高了地形生成的靈活性。下面對地形配置文件(terrain.cfg)各配置項的意義進行簡要分析。
WorldTexture=terrain_texture.jpg //地形紋理
DetailTexture=terrain_detail.jpg //地形細(xì)節(jié)紋理(相機距離地面很近時采用細(xì)節(jié)紋理)
DetailTile=3 //細(xì)節(jié)紋理在一個地形小塊中的平鋪數(shù)
PageSource=Heightmap //高度圖數(shù)據(jù)源
Heightmap.image=terrain.png //高度圖名稱(灰度圖文件名),符合2^n+1
PageSize=513 //高度圖大小
TileSize=65 //地形小塊大小
MaxPixelError=3 //決定使用層次細(xì)節(jié)時充許誤差
PageWorldX=1500 //地形在世界中的范圍x方向
PageWorldZ=1500 //z方向
MaxHeight=100 //世界中地形最大映射高度
MaxMipMapLevel=5 //層次細(xì)節(jié)上限
#VertexNormals=yes //在緩沖中計算頂點法線,計算機光照或GPU程序用到時打開
#VertexColors=yes //在緩沖中設(shè)置頂點顏色,假如有GPU程序需要時打開
#UseTriStrips=yes //對于現(xiàn)在的硬件,建議關(guān)掉
VertexProgramMorph=yes //使用頂點程序進行LOD融合處理
LODMorphStart=0.2 //LOD融合開始點:高,低LOD之間距離之比
下列參數(shù)用于提供自己的著色程序時使用,這會提供自己定義的material,那么先前定義的
WorldTexture 與 DetailTexture的設(shè)置不再用到。
MorphLODFactorParamName=morphFactor
//假設(shè)VertexProgramMorph被設(shè)為yes,定制的material中包括一個高級頂點程序。它指定了一個頂點
//程序的參數(shù)名,這個參數(shù)用于融合LOD,參數(shù)值從0-1,0表示不調(diào)整,1表示完全調(diào)整到下一級LOD
MorphLODFactorParamIndex //用于materail中包含低級頂點程序的情況,意義同上
CustomMaterialName //指定的materail名字
上述配置文件定義了基于高度圖的地形。
這些參數(shù)定義可概括為兩類:Ogre使用第一類從高度圖產(chǎn)生地形
mesh與材質(zhì)。
第二類是定制材質(zhì)與GPU頂點程序,這可以代替ogre自動產(chǎn)生的著色程序。
另外的說明:
TerrainScenceManager會把高度圖分為多個page,每個page由幾個tile組成.它們都定義了在產(chǎn)生的mesh中一組構(gòu)成正方形的頂點集。
WorldTexture定義的紋理不必與目標(biāo)地形一樣大。
PageWorldX,PageWorldZ可以縮放世界中的地形。
MaxHeight 在Y方向縮放地形。
DetailTexture 只使用一個紋理,如使用多層紋理,應(yīng)該使用自定義materail。
從程序加載地形
setWorldGeometry()有重載形式,一種用于加載配置文件,另一種我們可在程序中使用,以
達(dá)到手工加載的功能。這里,SceneData被 typedef 為std:map,它存儲了如我們在terrain.cfg
中看到那些值對。假設(shè)我們已經(jīng)從某個二進制文件讀入我們想要的內(nèi)容到SceneData中。我們要做
的就是把讀入的內(nèi)容轉(zhuǎn)換成setWorldGeometry()需要的類型。