วันพุธที่ 19 พฤศจิกายน พ.ศ. 2551

PyOgre Beginner Tutorial 1 - Part 4

Coordinates and Vectors
    ก่อนที่เราจะไปไกลกว่านี้ เราจะต้องพูดถึงเรี่ยวกับ screen coordinates and Ogre Vector objects สำหรับ Ogre นั้นก็เหมือนกับ กราฟฟิกเอนจิ้นทั่วๆไป คือ ให้แกน X เป็นแนวนอน Z แกนแนวลึก และ แกน Y เป็นแนวตั้ง เมื่อคุณมองจอคอมพิวเตอร์ขณะนี้ แกน X จะเริ่มจาก ซ้ายไปขวาของจอ โดยด้านขวาจะเป็นทิศทางบวก แกน  Y จะเริ่มจากล่างขึ้นบนของจอ โดยด้านบนจะเป็นทิศทางบวก  แกน Z จะมีทิศเข้าสู่จอและออกจากจอ โดยทิศทางบวกจะเริ่มจากทางนอกจอเข้าสู่จอ
    ถ้าให้ตัวหุ่นยนต์ Robot ในฉากหันหน้าไปตามทิศแกน X ในทิศบวกซึ่งเป็นคุณสมบัติของ Mesh เองที่มันสร้างถูกออกแบบไว้แล้ว Ogre ไม่สามารถที่จะรู้ได้ว่า Model ของคุณนั้นมีทิศหันไปทางไหน ดังนั้นแต่ละตัวที่ถูกโหลดขึ้นมา จะมีการหันทิศทางการหันแตกต่างกันออกไป
    Ogre ใช้ Vector class เป็นตัวแทนของตำแหน่งและทิศทาง (ไม่ใช่ Point class ) ซึ่งการกำหนด Vector จะมีอยู่ 2(Vector2), 3(Vector3), และ 4 (Vector4) มิติ โดยมากแล้ว Vector3 นั้นจะถูกใช้มากกว่า ถ้าคุณไม่คุ้นเคยกับ Vectors ก็ควรจะศึกษาเพิ่มเกี่ยวกับมัน ก่อนที่คุณจะทำอะไรที่ยากขึ้นกับ Ogre เพราะคณิตศาสตร์ของ Vectors จะใช้ประโยชน์ได้ เมื่อคุณทำงานกับโปรแกรมที่ซับซ้อนมากขึ้น



Adding another Object
    เมื่อเข้าใจเกี่ยวระบบตำแหน่งแล้ว เราจะกลับมาในส่วนของโค้ด ที่เขียนมาแล้ว ซึ่งโค้ดเราไม่มีการให้ค่าตำแหน่งที่เราต้องการให้ Robot เราแสดงบนจอภาพ แต่ฟังก์ชั่นใน Orge มีค่า Default ให้กับมันแล้ว สำหรับตัวอย่าง เช่น SceneNode.createChildSceneNode ฟังก์ชั่นสมาชิกใน Ogre มีพารามิเตอร์สามตัวประกอบด้วย ชื่อของ SceneNode  ตำแหน่งของ SceneNode ทิศทางการหัน SceneNode  ตำแหน่งนั้นถ้าคุณสังเกต จะเห็นว่ามันเป็นตำแหน่ง (0,0,0) ถ้าเราจะให้ค่าตำแหน่งเริ่มบางตำแหน่งแทนค่าเดิม

ent2 = sceneManager.createEntity('Robot2', 'robot.mesh')
node2 = sceneManager.rootSceneNode.createChildSceneNode('RobotNode2', ogre.Vector3(50, 0, 0))
node2.attachObject(ent2)

จากโค้ดจะคล้ายของเดิมแต่ได้มีการเพิ่มบางอย่างลงไป ขั้นแรก ตั้งชื่อ Entity และ SceneNode เป็นชื่อที่ต่างไปจากเดิม ขั้นสองเราให้ค่าตำแหน่งเริ่มต้น เปลี่ยนไปโดยให้ค่า X เป็น 50 จาก root SceneNode (จำไว้ว่า ทุกตำแหน่งของ SceneNode ทั้งหมดจะสัมพันธ์กับตัวหลัก ) เมื่อทำการทดสอบโค้ดเราจะ เห็น Robot สองตัวอยู่ข้างกัน


ไม่มีความคิดเห็น:

แสดงความคิดเห็น