ลำดับที่ถูกต้องในการคูณเมทริกซ์การหมุนและการแปลสำหรับเมทริกซ์โลกที่เหมาะสมคืออะไร?


62

สมมติว่า DirectX เป็นแพลตฟอร์มหากเป็นสิ่งสำคัญ (ค่อนข้างแน่ใจว่าไม่ใช่)

สมมติว่าฉันมีสเกลเมทริกซ์การหมุนและการแปลที่เหมาะสมฉันจะคูณพวกมันเพื่อผลในเมทริกซ์โลกที่เหมาะสมและทำไม

โดย "เหมาะสม" ฉันหมายถึง "ฉันสามารถโยนพวกเขาลงใน DirectX และรับเฟรม 3D ที่ใช้บ่อยที่สุด"


6
นี่คือคำอธิบายของ "หมุนแล้วแปล" (หมุน) vs "แปลแล้วหมุน" (โคจร)
bobobobo

ลิงก์นั้นดี แต่มีข้อผิดพลาดเล็กน้อย มันควรจะมีผลต่อการหมุนและไม่หมุนเนื่องจากทรงกลมมีแนวโน้มที่จะย้ายออกจากตำแหน่ง (เหลืออยู่บนแกน) โดยการแปล
infoclogged

คำตอบ:


77

โดยทั่วไปแล้วจะมีการปรับขนาดแล้วหมุนและการแปลในที่สุด ด้วยเมทริกซ์ denotation (เช่น T สำหรับเมทริกซ์การแปล, R สำหรับเมทริกซ์การหมุนและ S สำหรับเมทริกซ์สเกล) นั่นคือ:

T * R * S

อย่างไรก็ตามหากคุณต้องการหมุนวัตถุรอบ ๆ จุดหนึ่งก็จะเป็นการปรับขนาดการแปลจุดการหมุนและการแปลวัตถุในที่สุด

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

ใน OpenGL คุณสามารถใช้ gluLookAt เพื่อรับการแปลงกล้องเต็มรูปแบบในการโทรครั้งเดียว อาจมีการโทรที่คล้ายกันสำหรับ DirectX


11
และจำไว้ว่าถ้าคุณต้องการแปลงรอบจุดศูนย์กลางคุณต้องแปลเพื่อชดเชยจุดกึ่งกลางที่อยู่บนจุดกำเนิดจากนั้นทำตามที่ผู้ใช้ 392858 แจ้งไว้จากนั้นแปลมันกลับออกไปจากแหล่งกำเนิดด้วยจำนวนเดียวกัน โดยทั่วไปแล้วสิ่งนี้จำเป็นเฉพาะในแบบ 2D ซึ่งคุณมีผีสางที่มีซ้ายบนที่จุดกำเนิด
วิศวกร

ยิ่งใหญ่ :) ตอนนี้ฉันแค่ต้องคิดออกว่าทำไมตอนนี้แบบจำลองของฉันกลับเป็นมุมมองแนวนอนและต้องการผลิตภัณฑ์จุดบนแสงทิศทางกลับด้านในมุมมองแนวตั้ง มันไม่ได้ใช้ในการทำอย่างนั้นแล้วฉันคงคณิตศาสตร์บาง ...
narf เมาส์

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

ไม่มีปัญหายินดีช่วยเหลือเสมอ
ราฟาเอลอาร์

2
@Matthias เท่าที่ฉันรู้นั้นขึ้นอยู่กับว่าคุณคูณเวกเตอร์ที่คุณต้องการแปลงเป็นอย่างไร หากคุณคูณ M * v ดังนั้นใช่คำตอบจะกลับคำสั่งซื้อ
bialpio


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.