請先閱讀「寫在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。
天空
天空的貼圖法有三種:
- SkyBoxes,將天空貼在一個cube上
- SkyDomes,將天空貼在一個球體上 (但事實上他還是render在一個cube)
- SkyPlanes,將天空貼在平面上
- 如果你會看到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,我在這就不多談了…