本文參考PyOgre Beginner Tutorial 1
讓我們跟著上面那個tutorial的步驟一步一步做。首先我們看到這段程式,使用你熟悉的編輯器將他存到C:\Python25\Python-Ogre-0.8\demos\tutorial\tut1.py中
from pyogre import ogre
import SampleFramework
class TutorialApplication(SampleFramework.Application):
def _createScene(self):
pass
if __name__ == '__main__':
ta = TutorialApplication()
ta.go()
執行看看
cd \Python25\Python-Ogre-0.8\demos\tutorial
python tut1.py
結果當然有error囉,因為他引用了PyOgre的package名稱而非Python-Ogre
將程式的前兩行改成
import Ogre as ogre
import SampleFramework
It works!!右下角有OGRE的mark,左下角有FPS的效能數據。整個畫面黑黑的一片,因為我們還沒有放任何東西在場景中。其實PyOgre和Python-OGRE最大的差別應該就是在這個import package name吧,其他程式碼幾乎都可以直接work。
接下來我就簡化地follow tutorial,還是推薦大家詳閱原版的tutorial喔!!
我們稍微改寫一下_createScene函式:
def _createScene(self):
sceneManager = self.sceneManager
sceneManager.ambientLight = ogre.ColourValue(1, 1, 1)
ent1 = sceneManager.createEntity("Robot", "robot.mesh")
node1 = sceneManager.rootSceneNode.createChildSceneNode("RobotNode")
node1.attachObject(ent1)
然後再執行看看...
可以按上下左右、移動滑鼠試試喔!
第一行取得了sceneManager物件,在OGRE的架構中,所有你看的見的東西都是被這個物件管理的。
第二行設定了光源,要是拿掉了這行,畫面就會變成一片漆黑了。ambientLight是一種光源的類型,等到光源那節我再詳細介紹。
第三到五行在畫面上放置了一個機器人,這部份比較複雜一些,我們需要了解一些物件:
- MoveableObject:任何可以移動的物體。其實我們在這裡都不會直接取用他
- Entity:MoveableObject的子類別,你可以將任何可以用3D Mesh表示的物件看成一個Entity。(例如:人、魚、鳥、車)
然而燈光、攝影機...等等沒有3D模型的東西,他們是MoveableObject但不是Entity。 - SceneNode:這個概念比較抽象...我真的不太會解釋,請務必看wiki原文。
總而言之,每一個SceneNode都可以有他的parent及children,形成一個tree的結構。SceneNode記錄著相對於其parent的位置及方向。
SceneManager中有個root SceneNode,一般來說他應該是一切其他SceneNode的根源。我是把他想成類似世界原點座標..
簡單來說,要在場景上放上一個物件至少要做三件事:
- 建立Entity
程式碼第三行,載入robot的mesh並建立了這個entity - 建立SceneNode
程式碼第四行,注意他是從SceneManager建立這個SceneNode的。SceneNode必需以某種方式與SceneManager的root連結,我們才可以看的到他。 - 將Entity附在SceneNode上(程式碼第五行)
文章太長了,拆成兩篇...請看Python-Ogre Tutorial 1-2
沒有留言:
張貼留言