2007年2月14日 星期三

Python-Ogre Tutorial 3

請先閱讀「寫在OGRE Tutorial前面」,本文假設您的目錄配置都和我一樣。
本文參考PyOgre Beginner Tutorial 3

先建立C:\Python25\Python-Ogre-0.8\demos\tutorial\tut3.py,貼上這些程式碼:


# coding=big5

import Ogre as ogre
import SampleFramework

class TutorialApplication(SampleFramework.Application):
def _createScene(self):

self.sceneManager.setWorldGeometry("terrain.cfg")
self.sceneManager.setSkyBox(True, "Examples/SpaceSkyBox")

def _chooseSceneManager(self):
self.sceneManager = self.root.createSceneManager(ogre.ST_EXTERIOR_CLOSE)
# 選擇場景管理器

if __name__ == '__main__':
ta = TutorialApplication()
ta.go()


wiki上使用getSceneManager,到Python-OGRE好像要用createSceneManger。這部份我不太確定,不過反正他work了:



有關SceneManager的細節我就不多談,有興趣的請自行查閱。我把焦點放在Terrian, Sky, Fog上。

地型
在一開始我們就copy了一些檔案到tutorial資料夾下,包括了terrian.cfg。其中指定了地型的材質、參數等等。最重要的是這一段:
# Heightmap source
PageSource=Heightmap
# Heightmap-source specific settings
Heightmap.image=terrain.png

terrian.png中,其實就是一個以顏色表示各點高度的heightmap。

天空

天空的貼圖法有三種:
  1. SkyBoxes,將天空貼在一個cube上
  2. SkyDomes,將天空貼在一個球體上 (但事實上他還是render在一個cube)
  3. SkyPlanes,將天空貼在平面上
Wiki上的推薦使用法:
  • 如果你會看到y軸為負的方向(例如從天空之城向下看),使用SkyBoxes
  • SkyDomes在接近y=0的地方會沒貼到圖,所以如果你的場景是被山或建築物圍繞著,推薦使用。
  • SkyPlane的優點是GPU cost極小,另外,其他兩種貼圖方式和fog並用時可能產生問題 (請詳閱wiki種fog一節)



再修改一下_createScene...

def _createScene(self):
self.sceneManager.setWorldGeometry("terrain.cfg")

fadeColour = (0.9, 0.9, 0.9)
self.sceneManager.setFog(ogre.FOG_LINEAR, fadeColour, 0, 50, 515)
self.renderWindow.getViewport(0).backgroundColour = fadeColour

self.sceneManager.setSkyDome(True, "Examples/CloudySky", 5, 500)




被濃霧籠罩的山谷...




有關fog及plane的搭配請務必詳閱wiki,我在這就不多談了...

沒有留言: