ทำไมอินเวอร์ส transposed ของเมทริกซ์มุมมองแบบจำลองที่ใช้ในการแปลงเวกเตอร์ปกติ?


22

เมื่อเรนเดอร์ฉาก 3 มิติด้วยการแปลงที่นำไปใช้กับวัตถุบรรทัดฐานจะต้องถูกเปลี่ยนเป็นอินเวอร์ส transposed ของเมทริกซ์มุมมองโมเดล ดังนั้นด้วยปกติ , modelViewMatrixการแปลงปกติคือM n nMn

n=(M1)Tn

เมื่อเปลี่ยนวัตถุมันเป็นที่ชัดเจนว่าจะต้องมีการแปลงมาตรฐาน แต่ทำไมในทางคณิตศาสตร์นี่คือเมทริกซ์การแปลงที่สอดคล้องกัน?


หากเมทริกซ์โมเดลทำจากการแปลการหมุนและสเกลคุณไม่จำเป็นต้องแปลงกลับในการคำนวณเมทริกซ์ปกติ เพียงแค่หารปกติตามกำลังสองและคูณด้วยเมทริกซ์โมเดลแล้วเราก็เสร็จแล้ว คุณสามารถขยายมันไปยังเมทริกซ์ใด ๆ ที่มีแกนตั้งฉากได้เพียงคำนวณสเกลยกกำลังสองสำหรับแต่ละแกนของเมทริกซ์ที่คุณใช้แทน ฉันเขียนรายละเอียดในบล็อกของฉัน: lxjk.github.io/2017/10/01/Stop-Using-Normal-Matrix.html
Eric

คำตอบ:


22

นี่เป็นข้อพิสูจน์อย่างง่ายว่าจำเป็นต้องใช้การแปลงผกผัน สมมติว่าเรามีระนาบซึ่งนิยามโดยสมการระนาบโดยที่เป็นค่าปกติ ตอนนี้ผมต้องการที่จะเปลี่ยนเครื่องบินลำนี้โดยบางเมทริกซ์Mกล่าวอีกนัยหนึ่งฉันต้องการค้นหาสมการระนาบใหม่ที่พอใจสำหรับค่าเดียวกันที่ตรงกับสมการระนาบก่อนหน้าn M n M x + d = 0 xnx+d=0nMnMx+d=0x

ในการทำเช่นนี้มันพอเพียงที่จะตั้งสมการระนาบสองตัวให้เท่ากัน (สิ่งนี้ยอมให้ความสามารถในการ rescale สมการเครื่องบินโดยพลการ แต่มันไม่สำคัญสำหรับการโต้แย้ง) จากนั้นเราสามารถตั้งค่าและลบออกได้ สิ่งที่เราเหลืออยู่คือ:d=d

nMx=nx

ฉันจะเขียนสิ่งนี้ด้วยผลิตภัณฑ์ดอทที่แสดงในรูปสัญกรณ์เมทริกซ์ (คิดว่าเวกเตอร์เป็นเมทริกซ์ 1 คอลัมน์):

nTMx=nTx

ทีนี้เพื่อทำให้พอใจสำหรับทั้งหมด เราต้องมี:x

nTM=nT

ตอนนี้แก้ในแง่ของ , nnn

nT=nTM1n=(nTM1)Tn=(M1)Tn

โอมเพี้ยง! หากคะแนนถูกแปลงโดยเมทริกซ์ดังนั้นค่าพื้นฐานของระนาบจะต้องเปลี่ยนโดยการแปลงกลับของเพื่อรักษาสมการระนาบM MxMM

นี่คือคุณสมบัติของผลิตภัณฑ์ dot เพื่อให้ผลิตภัณฑ์ดอทยังคงไม่เปลี่ยนแปลงเมื่อมีการใช้การแปลงเวกเตอร์สองตัวที่ถูกจุดจะต้องแปลงในรูปแบบที่สอดคล้อง แต่แตกต่างกัน

ในทางคณิตศาสตร์สิ่งนี้สามารถอธิบายได้ด้วยการบอกว่าเวกเตอร์ปกติไม่ใช่เวกเตอร์สามัญ แต่สิ่งที่เรียกว่าcovector (เวกเตอร์ covariant, เวกเตอร์คู่หรือรูปเชิงเส้น) covector นั้นถูกนิยามโดยทั่วไปว่า "สิ่งที่สามารถวาดด้วยเวกเตอร์เพื่อสร้างสเกลาคงที่" เพื่อให้บรรลุผลนั้นจะต้องแปลงโดยใช้การแปลงกลับของเมทริกซ์อะไรก็ตามที่ทำงานบนเวกเตอร์สามัญ สิ่งนี้ถือในมิติใด ๆ

โปรดทราบว่าใน 3D โดยเฉพาะ bivector จะคล้ายกับ covector พวกเขาไม่ได้ค่อนข้างเหมือนกันเพราะพวกเขามีหน่วยที่แตกต่างกัน: ก covector มีหน่วยของความยาวผกผันในขณะที่ bivector มีหน่วยของความยาวยืด (พื้นที่) เพื่อให้พวกเขาทำงานแตกต่างกันภายใต้การปรับ อย่างไรก็ตามพวกเขาเปลี่ยนวิธีเดียวกันกับการปฐมนิเทศซึ่งเป็นสิ่งที่สำคัญสำหรับบรรทัดฐาน เรามักจะไม่สนใจขนาดปกติ (เรามักทำให้ปกติเป็นหน่วยความยาวอยู่แล้ว) ดังนั้นเราจึงไม่ต้องกังวลเกี่ยวกับความแตกต่างระหว่าง bivector และ covector


2
คำอธิบายที่น่ากลัว อย่างไรก็ตามเร็ว 2 คะแนนจะได้รับรายละเอียดเพิ่มเติมเล็กน้อย: 1. คุณจะข้ามจากผลิตภัณฑ์ dot ไปสู่ผลิตภัณฑ์ matrix ได้อย่างไร? 2. ระหว่างบรรทัดที่ 2 และ 3 ของส่วนที่ยกมาล่าสุดสิ่งที่เกิดขึ้น (n ถูกย้ายจากซ้ายไปขวาเล็กน้อยอย่างน่าอัศจรรย์สำหรับฉัน)
v.oddou

4
1. (a ^ T) b เหมือนกับ dot (a, b) ถ้า a และ b เป็นเมทริกซ์คอลัมน์ของมิติเดียวกัน ลองคณิตศาสตร์ด้วยตัวคุณเอง! 2. (AB) ^ T = (B ^ T) (A ^ T) และ (A ^ T) ^ T = A สำหรับข้อมูลเพิ่มเติมของเมทริกซ์ให้ดูที่ตำราอาหารเดอะเมทริกซ์
Mokosha

3
@ v.oddou Yep, Mokosha ถูกต้อง ผลิตภัณฑ์ดอทสามารถแสดงเป็นการคูณเมทริกซ์ 1 × n (เวกเตอร์แถว) กับเมทริกซ์× 1 (เวกเตอร์คอลัมน์); ผลลัพธ์คือเมทริกซ์ขนาด 1 × 1 ซึ่งมีองค์ประกอบเดียวคือผลคูณของจุด ทรานสโพสของเวกเตอร์คอลัมน์คือเวกเตอร์แถวดังนั้นเราจึงสามารถเขียน a · b เป็น ^ T b สำหรับคำถามที่สองการเคลื่อนย้ายผลิตภัณฑ์ของเมทริกซ์นั้นเทียบเท่ากับการย้ายปัจจัยแต่ละอย่างและย้อนกลับคำสั่ง
นาธานรีด

สมบูรณ์แบบมันชัดเจนโดยไม่มีปัญหาตอนนี้ ขอบคุณทั้งคู่
v.oddou

@NathanReed (สิ่งนี้ทำให้ฉันย้อนกลับไปในช่วงต้นวันของ PowerVR ที่เราทำแบบจำลองสิ่งต่าง ๆ ด้วยเครื่องบิน) มันอาจจะคุ้มค่าที่จะกล่าวถึงว่าสำหรับวัตถุประสงค์ในการปรับให้เหมาะสมหากคุณมีเมทริกซ์Mrที่มีการหมุนเท่านั้น (เช่น orthogonal) ดังนั้น Inverse ( Mr ) = Transpose ( Mr ) และ Trans (Inverse ( Mr ) = _ Mr_ นอกจากนี้คุณยังสามารถใช้ทางลัดในส่วนการแปลและถ้าคุณรู้ว่าการปรับขนาดนั้นสม่ำเสมอ FWIW ในไลบรารีกราฟิก SGL PowerVR เราเคยใช้ booleans เพื่อติดตามว่าเมทริกซ์การแปลงมีคุณสมบัติเหล่านี้เพื่อประหยัดค่าใช้จ่ายด้วยการแปลงปกติหรือไม่
Simon F

6

นี่เป็นเพียงเพราะบรรทัดฐานไม่ใช่เวกเตอร์จริงๆ! พวกเขาสร้างขึ้นโดยผลิตภัณฑ์ข้ามซึ่งส่งผลให้bivectorsไม่ใช่เวกเตอร์ พีชคณิตทำงานแตกต่างกันมากสำหรับพิกัดเหล่านี้และการแปลงเชิงเรขาคณิตเป็นเพียงการดำเนินการหนึ่งที่มีพฤติกรรมแตกต่างกัน

ทรัพยากรที่ดีสำหรับการเรียนรู้เพิ่มเติมเกี่ยวกับเรื่องนี้เป็นการนำเสนอเอริค Lengyel บน Grassman พีชคณิต


ปรกติก็เรียกว่า pseudovectors เป็นลักษณะทั่วไปและกฎของหัวแม่มือทุกอย่างที่เกิดจากผลิตภัณฑ์ข้าม (เช่นเครื่องบิน) จะถูกเปลี่ยนในรูปแบบที่คล้ายกัน
Matthias
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.