วันเสาร์ที่ 15 พฤศจิกายน พ.ศ. 2551

PyOgre Beginner Tutorial 1 - Part 3

 Your first Ogre application


                   กลับสู่โค้ดโปรแกรมที่ได้เขียนไว้แล้วในPyOgre Beginner Tutorial 1 - Part 1 โดยจะปรับปรุงเพิ่มโค้ดในส่วน ของฟังก์ชั่น _createScene โดยสิ่งแรกที่จะทำคือการเซต ambient light สำหรับ Scene เพื่อที่จะทำให้เราสามารถมองเห็นใน Scene ได้ว่าเรากำลังทำอะไรอยู่ โดยจะทำการเรียกฟังก์ชั่น setAmbientLight และทำการตั้งค่าสีของแสงตามที่เราต้องการ โดยให้จำไว้ว่า ค่าที่จะใส่นั้นจะเรียง red, green, blue   และมีค่าในช่วงระหว่าง 0-1


sceneManager = self.sceneManager
sceneManager.ambientLight = ogre.ColourValue(1, 1, 1)


 ขั้นต่อไปเราจะทำการสร้าง Entity ที่จะให้ปรากฏบนจอ เราทำโดยการเรียก 


ent1 = sceneManager.createEntity('Robot', 'robot.mesh')


 คำบางคำถามเกิดขึ้น ก่อนอื่น self.sceneManager มาจากไหนและเราเรียก createEntity ด้วยอะไร self.sceneManager นั้นเป็นตัวแปร ที่มีส่วนของ SceneManager object ปัจจุบัน (ถูกประกาศไว้ใน SampleFramework.Application )

ค่าพารามิเตอร์ตัวแรกสำหรับแมทอด createEntity ก็คือชื่อของ Entity ที่ต้องการสร้างขึ้น ตามด้วยชื่อโมเดล

 เราสามารถทำให้สร้างสิ่งที่สร้าง เกิดปรากฏบนจอได้ เราต้องสร้าง SceneNode เพื่อนำมันมาผูกติดโดยเหตุนี้ทุกๆ SceneManager จึงมีหนึ่ง root SceneNode เป็นตัวหลัก เราสามารถสร้าง node ย่อยผูกต่อโดย


node1  =  sceneManager.rootSceneNode.createChildSceneNode('RobotNode')


 ในส่วนของโค้ดนี้เราได้เรียก method createChildSceneNode ของ root SceneNode ค่าที่ผ่านสู่ createChildSceneNode คือชื่อของ SceneNode ที่เราสร้าง คล้ายในส่วนของ Entity class และ SceneNode ไม่สามารถมีชื่อเดียวกันได้

ขั้นสุดท้ายเราต้องทำการผูก Entity เข้ากับ SceneNode ดังนั้น Robot จึงมีตำแหน่งที่จะเรนเดอร์ที่


node1.attachObject(ent1)


 โค้ดที่ได้จากของเดิมจะเป็น


import ogre.renderer.OGRE as ogre
import SampleFramework as sf
class TutorialApplication(sf.Application):
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)

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

และเมื่อทำการทดสอบ Run โค้ดที่สร้างคุณจะเห็นตัวหุ่นยนต์ปรากฏอยู่บนหน้าจอ






หมายเหตุ โค้ดโปรแกรมที่เขียนทดสอบต้องบันทึกใน C:\PythonOgre\demos\ogre เพื่อการอ้างอิงค่าคอนฟิกของโปรแกรมเดิมและโมเดล 3d ที่เรียกใช้ทดสอบโปรแกรม

PyOgre Beginner Tutorial 1 - Part 2

Ogre Engine ทำงานได้อย่างไร



เราเริ่มต้นด้วย SceneManagers ซึ่งเป็นการนำเราเข้าสู่การควบคุมและใช้งาน MovableObjects และ SceneNodes มีสาม classes ที่เป็นพื้นฐานสำคัญในการสร้าง Ogre applications


1. SceneManager Basics

                   ทุกอย่างที่ปรากฏในหน้าจอถูกจัดการด้วย SceneManager เมื่อคุณทำการวาง objects เข้าไปใน Scene ตัว SceneManager คือ class ที่จะคอยติดตาม ตำแหน่งของพวกมัน เช่นเมื่อคุณสร้าง Cameras เพื่อจะมองเข้าไปใน Scene SceneManager คอยติดตาม ตำแหน่งของพวกมัน ไม่ว่าคุณจะสร้าง planes, billboards, lights หรืออื่นๆก็เช่นเดียวกัน

                มี SceneManager อยู่หลายประเภท

                1 Selecting a Scene Manager

                2 Octree Scene Manager

                3 Terrain Scene Manager

                4 Nature Scene Manager (ogreaddons)

                5 Paging Scene Manager (ogreaddons)

                6 BSP Scene Manager

                7 DotSceneOctree SceneManager (ogreaddons)

               

2.MovableObject Basics

                MovableObject    คือทุกสิ่งที่สามารถวางลงไปใน Scene และทำให้เคลื่อนที่ได้ ซึ่งโดยที่จริงแล้วมี object ประเภทเดียวที่สามารถเรนเดอร์ให้เห็นใน Scene ได้ซึ่งเรียกว่า 3D mesh เช่น หุ่นยนต์ ปลา หรือ พื้นดินที่ตัวละครคุณสามารถที่เดิน ล้วนเป็น Entity สำหรับ Lights, Billboards, Particles, Cameras,อื่นๆ ไม่เป็น Entity แต่ก็เป็น MovableObjects

                 สิ่งหนึ่งที่ต้องจดจำเกี่ยวกับ Ogre คือมันแยกการเรนเดอร์ objects จากตำแหน่งและทิศการ หัน หมายความว่าคุณไม่สามารถที่จะวาง สิ่งที่มีอยู่ลง Scene โดยตรง คุณต้องผูกติด Entity เข้ากับ SceneNode ซึ่งมันจะเก็บข้อมูลเกี่ยวกับตำแหน่งและทิศการหันไว้นั้นเอง

                *Entity =สิ่งที่มีจริงมองเห็นได้

  

3.SceneNode Basics

                SceneNode   จะเป็นตัวเก็บข้อมูลเกี่ยวกับตำแหน่งและทิศการหันไว้สำหรับ Entity ที่ผูกติดกลับตัวของมันไว้ทั้งหมด เมื่อคุณสร้างวัตถุที่จะแสดง มันจะไม่มีการเรนเดอร์ให้เห็นในบนจอ จนกระทั่งคุณจะผูกติดมันกับ SceneNode ถึงจะมีการเรนเดอร์ให้เห็นบนหน้าจอ

                SceneNode สามารถมีจำนวนวัตถุที่ผูกติดกับมันเท่าไหร่ก็ได้ เช่น ต้องสร้างตัวละคร

บนหน้าจอและต้องการสร้างแสงรอบๆตัวละคร สิ่งที่ต้องทำเป็นอย่างแรกคือ สร้าง SceneNode มาอันหนึ่ง สร้าง ตัวละครผูกกับ SceneNode จากนั้นก็สร้าง Light object ผูกกับ SceneNode สำหรับ SceneNode นั้นเราสามารถที่จะผูกติดกับ SceneNode อันอื่นได้ ซึ่งจะทำให้เกิดลำดับขั้นของ SceneNodes

                   หนึ่งเนื้อหาสำคัญที่ต้องจดจำไว้เกี่ยวกับ SceneNodes ตำแหน่งของ SceneNode  จะสัมพันธ์กับ SceneNode ที่เป็นต้นที่มันผูกติดด้วยเสมอ และแต่ละ SceneManager จะประกอบด้วยจุดต่อรวม หลักหนึ่งอันที่สามารถที่จะให้ SceneNodes อื่นผูกติด

วันพฤหัสบดีที่ 13 พฤศจิกายน พ.ศ. 2551

PyOgre Beginner Tutorial 1 - Part 1

PyOgre Beginner Tutorial 1

From Ogre Wiki แก้ไข 22/10/2551

เริ่มต้น Base Code ทำการ import สิ่งที่ต้องการใช้งานซึ่งก็คือ OGRE และ SampleFramework เพื่อใช้ในการสืบทอดสร้างโปรแกรมของเราเอง สามารถที่จะดูคลาสและเมทอด ภายใน SampleFramework ได้โดยเปิดดูไฟล์ SampleFramework.py สำหรับโครงสร้างโค้ดพื้นฐาน นี้สามารถนำไปเพิ่มเติมส่วนต่างๆ ได้อีก เมื่อศึกษาให้ลึกมากขึ้น 

import ogre.renderer.OGRE as ogre
import SampleFramework as sf 
class TutorialApplication(sf.Application): 
def _createScene(self):
pass 
if __name__ == '__main__':
ta = TutorialApplication()
ta.go()

 เมื่อรันสคริป เราสามารถที่จะให้เมาส์ หรือกดปุ่ม WASD เพื่อที่จะเคลื่อนฉากในแนวระนาบได้ แต่ในตอนนี้เราจะไม่เห็นสิ่งที่เกิดขึ้นเพราะ ไม่มีการสร้างอะไรในฉาก เราจึงเห็นแต่จอภาพดำสนิท สามารถที่จะออกจากโปรแกรมโดยกดปุ่ม ESC



หมายเหตุ โค้ดโปรแกรมที่เขียนทดสอบต้องบันทึกใน C:\PythonOgre\demos\ogre เพื่อการอ้างอิงค่าคอนฟิกของโปรแกรมเดิมและโมเดล 3d ที่เรียกใช้ทดสอบโปรแกรม

การติดตั้ง PyOgre Game Engine

 การติดตั้ง PyOgre Game Engine

  1. ดาวโหลด Python 2.5 หรือเวอร์ชั่นสูงกว่า download
  2. ดาวโหลด PyOgre Game Engine
  3. อัพเดด directX ให้เป็นเวอร์ชั่นปรับปรุงใหม่ล่าสุด

ลิงค์ตัวช่วย


สามารถค้นหา ข้อมูลอื่นได้โดยผ่านทาง Google นะครับ