เกี่ยวกับการแปลงพิกัดของโมเดล 3 มิติ
สาร
ก่อนอื่น
คุณอาจเห็นภาพ 3 มิติบนหน้าจอทีวีและการแสดงผลในเกมบ่อยครั้ง แต่คุณจะแสดงวัตถุที่มีอยู่ในพื้นที่ 3 มิติ เช่น ตัวละครและอาคารที่เคลื่อนที่ไปมาบนหน้าจอบนหน้าจอได้อย่างไร
ในเกม 2 มิติ มีเพียงองค์ประกอบสองมิติของ "X และ Y" เป็นค่าพิกัด และการแสดงผลก็เป็น 2 มิติเช่นกัน ดังนั้นหากคุณวาดวัตถุโดยระบุตําแหน่งพิกัดของ X และ Y คุณจะเข้าใจโดยสัญชาตญาณว่าจะวาดวัตถุนั้นอย่างไรในตําแหน่งใด
อย่างไรก็ตาม ใน 3 มิติ มันไม่ง่ายนัก ตามชื่อที่แนะนํา 3D คือ "3 มิติ" และมีข้อมูลพิกัดสามแบบ: "X, Y และ Z" เนื่องจากพิกัดแตกต่างจากจอแสดงผลที่เป็น 2 มิติ จึงไม่สามารถวาดวัตถุได้ตามที่เป็นอยู่
จากนั้นสิ่งที่ต้องทําคือ "แปลงข้อมูลสามมิติเป็นข้อมูลสองมิติ" สิ่งนี้มักเรียกว่า "การแปลงพิกัด" โปรดทราบว่าการแปลงพิกัดนี้จําเป็นสําหรับการเขียนโปรแกรม 3 มิติ
การแปลงพิกัดมีหลายประเภทสําหรับการแปลง 3 มิติเป็น 2 มิติ แต่มีการแปลงพิกัดสามประเภทหลักที่โปรแกรมเมอร์จัดการ: "การแปลงโลก" "การแปลงมุมมอง" และ "การแปลงการฉายภาพ" ที่นี่เราจะอธิบายทุกอย่างที่เกี่ยวข้องกับการแปลงพิกัด
ระบบพิกัดมือซ้ายและมือขวา
ใน 3 มิติ มีระบบพิกัดสองระบบ ได้แก่ "ระบบพิกัดมือซ้าย" และ "ระบบพิกัดมือขวา" ซึ่งมีการวางแนวที่แตกต่างกันสําหรับแต่ละพิกัดดังแสดงในรูปด้านล่าง
Direct3D ใช้ระบบพิกัดที่มือซ้ายเป็นหลัก แต่ก็มีฟังก์ชันสําหรับการคํานวณสําหรับระบบพิกัดที่มือขวาด้วย อย่างไรก็ตาม XNA มีวิธีการคํานวณสําหรับระบบพิกัดที่มือขวาเท่านั้น ดูเหมือนว่าจะสอดคล้องกับข้อเท็จจริงที่ว่าแอปพลิเคชันอื่น ๆ มักใช้ระบบพิกัดที่มือขวา
เคล็ดลับ XNA ทั้งหมดในไซต์นี้ใช้ระบบพิกัดที่มือขวา
ระบบพิกัดท้องถิ่น (ระบบพิกัดแบบจําลอง)
แต่ละรุ่นมีระบบพิกัดที่มีศูนย์กลางอยู่ที่จุดกําเนิด เมื่อสร้างโมเดลด้วยซอฟต์แวร์การสร้างแบบจําลองฉันคิดว่ามันง่ายกว่าที่จะเข้าใจถ้าคุณจินตนาการถึงการสร้างมันโดยมีจุดกําเนิดเป็นศูนย์กลาง
ระบบพิกัดโลก
ระบบพิกัดโลกช่วยให้คุณสามารถวางโมเดลได้ทุกที่ หากคุณไม่ทําอะไรเลยในการเปลี่ยนแปลงโลกนี้โมเดลจะถูกวางไว้ที่จุดกําเนิดในลักษณะเดียวกับพิกัดท้องถิ่น การจัดวางไม่เพียงแต่ย้ายจากจุดเริ่มต้น แต่ยังรวมถึงการหมุนและปรับขนาดด้วย
ดูระบบพิกัด
เมื่อคุณวางโมเดลในพิกัดโลกแล้ว คุณต้องการข้อมูลเกี่ยวกับตําแหน่งที่คุณกําลังดูและตําแหน่งที่คุณกําลังดูพื้นที่ 3 มิติ นี่คือสิ่งที่เราเรียกว่า "การแปลงมุมมอง" โดยทั่วไปแล้วการแปลงมุมมองมักแสดงเป็นกล้อง
พารามิเตอร์ที่จําเป็นสําหรับการแปลงนี้คือ "ตําแหน่งกล้อง" "จุดสนใจของกล้อง" และ "ทิศทางขึ้นของกล้อง" การวางแนวของกล้องถูกกําหนดโดยพารามิเตอร์ทั้งสามนี้ รูปด้านล่างแสดงกล้องจากมุมมองของบุคคลที่สาม
รูปด้านล่างสามารถมองเห็นได้จากมุมมองของกล้องด้วยการจัดเรียงที่แสดงในรูปด้านบน (ณ จุดนี้เรายังไม่ได้แปลงพิกัดเป็นหน้าจอดังนั้นจึงเป็นเพียงภาพ)
ในคําอธิบายก่อนหน้านี้ดูเหมือนว่ากล้องจะอยู่ในตําแหน่งและพิกัดจะถูกแปลง แต่ในการคํานวณจริงพิกัดโลกจะถูกแปลงตามตําแหน่งและการวางแนวของกล้อง ดังนั้นจุดกําเนิดคือตําแหน่งของกล้องดังแสดงในรูปด้านล่าง
ระบบพิกัดแบบฉายภาพ
เมื่อคุณตัดสินใจได้แล้วว่าจะดูพื้นที่ 3 มิติจากตําแหน่งใดขั้นตอนต่อไปคือการประมวลผลการแสดง "วัตถุขนาดเล็กที่อยู่ห่างไกล" และ "สิ่งของขนาดใหญ่ที่อยู่ใกล้เคียง" สิ่งนี้เรียกว่าการเปลี่ยนแปลงแบบฉายภาพ การแปลงการฉายภาพมีสองวิธีคือ "การฉายภาพเปอร์สเปคทีฟ" และ "การฉายภาพออร์โธกราฟี" แต่ภาพ "การฉายภาพเปอร์สเปคทีฟ" ที่ใช้กันทั่วไปมีดังนี้
การฉายภาพเปอร์สเปคทีฟใช้พารามิเตอร์ต่อไปนี้: View มุมเอียง, อัตราส่วนภาพ, ตําแหน่งคลิปไปข้างหน้า และ ตําแหน่งคลิปด้านหลัง พื้นที่ที่มีป้ายกํากับ "frustum" ในรูปด้านบนจะปรากฏบนหน้าจอในที่สุด
"View มุมเอียง" ระบุ view ช่วงที่มองเห็นได้จากกล้อง การลดมุมจะซูมเข้า การเพิ่มมุมจะซูมออก มุมมองจะเป็นค่าแนวตั้งของฟรูสตัม
อัตราส่วนภาพใช้เพื่อกําหนดมุมรับภาพในแนวนอน ในขณะที่มุมมองเป็นมุมแนวตั้ง มุมแนวนอนมักจะถูกกําหนดโดย "มุมมอง×อัตราส่วนภาพ" และอัตราส่วนภาพโดยทั่วไปคือค่าของ "ความกว้าง÷ความสูง" ของหน้าจอที่คุณพยายามแสดง หากคุณเปลี่ยนค่านี้ วัตถุ 3 มิติที่แสดงจะดูเหมือนยืดในแนวนอนหรือแนวตั้ง
ตําแหน่งคลิปไปข้างหน้า และ ตําแหน่งคลิปด้านหลัง ถูกระบุเพื่อกําหนดว่าวัตถุจะแสดงในช่วงด้านหน้าหรือด้านหลัง เนื่องจากลักษณะของคอมพิวเตอร์จึงไม่สามารถแสดงได้ถึงอนันต์ดังนั้นเราจะกําหนดขีด จํากัด ค่านี้ยังส่งผลต่อความแม่นยําของบัฟเฟอร์ Z ดังนั้นจึงไม่แนะนําให้รวมไว้ในพื้นที่วาดภาพเกินช่วงที่ไม่จําเป็นต้องแสดง
วัตถุที่แปลงเปอร์สเปคทีฟจะถูกแปลงเป็นพื้นที่ดังด้านล่าง วัตถุที่อยู่ใกล้กับกล้องจะถูกซูมเข้า และวัตถุที่อยู่ห่างไกลจะถูกลดขนาดลง
สิ่งนี้แสดงให้เห็นในแผนภาพที่เข้าใจง่ายด้านล่าง
หากคุณมองจากมุมมองของกล้องจริง ๆ จะมีลักษณะดังนี้
อีกวิธีหนึ่งของการแปลงแบบฉายภาพคือการฉายภาพออร์โธกราฟี ซึ่งฉายภาพพื้นที่ที่มองเห็นได้เช่นด้านล่าง เนื่องจากความกว้างและความสูงคงที่โดยไม่คํานึงถึงความลึกขนาดของวัตถุจึงไม่เปลี่ยนแปลงตามความลึก
ระบบพิกัดหน้าจอ
หลังจากการแปลงการฉายภาพจะถูกแปลงเป็นพิกัดของหน้าจอจริง แม้ว่าจะเป็นหน้าจอ แต่ตําแหน่งและช่วงของการแสดงผลจะเปลี่ยนไปขึ้นอยู่กับการตั้งค่าวิวพอร์ตที่ตั้งไว้บนอุปกรณ์ อย่างไรก็ตาม ในกรณีของเกม พิกัดไคลเอ็นต์ของหน้าต่างมักจะเป็นวิวพอร์ตตามที่เป็นอยู่ ดังนั้นฉันจึงไม่คิดว่าคุณจําเป็นต้องกังวลมากเกินไป
พิกัดของหน้าจอ (0, 0) จะถูกแปลงจากพิกัดการฉายภาพ (-1, 1, z) ในทํานองเดียวกันพิกัดหน้าจอ (ความกว้างความสูง) จะถูกแปลงจากพิกัดการฉายภาพ (1, -1 ,z)