2007年2月14日 星期三

Python-Ogre Tutorial 1

請先閱讀「寫在OGRE Tutorial前面」,本文假設您的目錄配置都和我一樣。
本文參考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的根源。我是把他想成類似世界原點座標..


簡單來說,要在場景上放上一個物件至少要做三件事:
  1. 建立Entity
    程式碼第三行,載入robot的mesh並建立了這個entity
  2. 建立SceneNode
    程式碼第四行,注意他是從SceneManager建立這個SceneNode的。SceneNode必需以某種方式與SceneManager的root連結,我們才可以看的到他。
  3. 將Entity附在SceneNode上(程式碼第五行)


文章太長了,拆成兩篇...請看Python-Ogre Tutorial 1-2

沒有留言: