Neden normal vektörleri dönüştürmek için kullanılan model görünüm matrisinin ters çevrilmiş tersi kullanılır?


22

Nesnelere uygulanan dönüşümlerle 3D sahneler oluştururken, normallerin model görünüm matrisinin aktarılmış tersiyle dönüştürülmesi gerekir. Yani, normal olan , modelViewMatrix M , dönüştürülmüş, normal olduğununMn

n=(M1)Tn

Nesneleri dönüştürürken, normallerin buna göre dönüştürülmesi gerektiği açıktır. Fakat neden matematiksel olarak bu karşılık gelen dönüşüm matrisidir?


Model matrisi çeviri, döndürme ve ölçekden yapılmışsa, normal matrisi hesaplamak için ters transpozisyon yapmanız gerekmez. Sadece normali kare skala ile bölün ve model matris ile çarpın, bittik. Bunu, dikey eksenleri olan herhangi bir matrise uzatabilirsiniz, bunun yerine kullandığınız matrisin her ekseni için sadece kare ölçeğini hesaplayın. Detayları blogumda yazdım
Eric

Yanıtlar:


22

İşte ters devri gerekli olduğu basit bir kanıtı. Bir uçak denklem ile tanımlanan bir düzlem, varsayalım burada, n, normaldir. Şimdi bu düzlemi bir M matrisi ile dönüştürmek istiyorum . Başka bir deyişle, önceki düzlem denklemini tam olarak karşılayan aynı x değerleri için tatmin olan n M x + d = 0 olan yeni bir düzlem denklemi bulmak istiyorum .nx+d=0nMnMx+d=0x

Bunu yapmak için, iki düzlem denklemini eşit ayarlamak yeterlidir. (Bu, düzlem denklemlerini keyfi olarak yeniden düzenleme yeteneğinden vazgeçer, ancak bu argüman için önemli değildir.) O zaman ayarlayabilir ve çıkarabiliriz. Elimizde kalan şey:d=d

nMx=nx

Bunu matris notasyonunda ifade edilen nokta ürünleri ile yeniden yazacağım (vektörleri 1-sütun matrisi olarak düşünerek):

n'TMx=nTx

Şimdi tüm için bunu karşılamak için , biz olmalı:x

nTM=nT

Şimdi için çözme anlamında n ,nn

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

Presto! Eğer noktaları bir M matrisi ile dönüştürülürse , düzlem normları , düzlem denklemini korumak için M'nin ters devri ile dönüşmelidir .xMM

Bu temelde nokta ürünün bir özelliğidir. Bir dönüşüm uygulandığında, nokta ürünün değişmez kalması için, noktalı olan iki vektörün karşılık gelen fakat farklı yollarla dönüşmesi gerekir.

Matematiksel olarak, bu normal vektörün sıradan bir vektör değil, bir kovektör (aka kovaryant vektör, çift vektör veya doğrusal form) olarak adlandırılan bir şey olduğunu söyleyerek açıklanabilir . Bir kovektör temel olarak "değişmez bir skalar üretmek için bir vektörle noktalanabilen bir şey" olarak tanımlanır. Bunu başarmak için, sıradan vektörlerde hangi matrisin çalıştığını ters transpozisyonu kullanarak dönüştürmesi gerekir. Bu, herhangi bir sayıda boyutta bulunur.

Özellikle 3D'de bir bivektörün bir kovektöre benzer olduğunu unutmayın. Değiller oldukça farklı birimleri beri aynı: Bir bivector onlar ölçeklendirme altında farklı davranır böylece uzunluk birimleri, (alan) kare sahipken bir covector ters uzunlukta birimleri var. Ancak, oryantasyonları için de aynı şekilde dönüşüm yapıyorlar; bu normaller için önemli olan şey. Genelde normalin büyüklüğünü umursamayız (onları her zaman birim uzunluğa göre normalleştiririz), bu yüzden genellikle bir bivektör ve bir konvektör arasındaki farktan endişe etmemize gerek yoktur.


2
harika bir açıklama. ancak 2 noktada biraz daha hızlı, biraz daha fazla ayrıntı sevinir: 1. nokta ürünlerden matris ürünlere nasıl geçersiniz? 2. son alıntılanan bölümün 2. ve 3. satırları arasında, ne olur (n, soldan sağa biraz sihirli bir şekilde bana doğru hareket eder)
v.oddou

4
1. (a ^ T) b, eğer a ve b aynı boyuttaki sütun matrisleri ise, nokta (a, b) ile aynıdır. Matematiği kendiniz deneyin! 2. (AB) ^ T = (B ^ T) (A ^ T) ve (A ^ T) ^ T = A Daha fazla matris kimliği için, Matrix Yemek Kitabı
Mokosha'ya

3
@ v.oddou Yep, Mokosha haklıdır. Nokta ürünü, 1 x n'lik bir matrisin (satır vektörü) bir × 1 matrisiyle (sütun vektörü) çarpılması olarak ifade edilebilir; sonuç, tek bileşeni nokta ürün olan 1 × 1'lik bir matristir. Bir sütun vektörünün devri bir satır vektörüdür, bu yüzden a · b harfini ^ T b olarak yazabiliriz. İkinci soru için, bir matris ürününün transpoze edilmesi, bireysel faktörlerin transpozisyonuna ve sıralarını tersine çevirmeye eşdeğerdir.
Nathan Reed

mükemmel, şimdi sorun olmadan hepsi açık. ikinize de teşekkürler.
v.oddou

@NathanReed (Tanrım, bu beni çoğu şeyi uçaklarla modellediğimiz ilk PowerVR günlerine götürüyor). Eğer bir matris varsa o da, optimizasyon amacıyla, değer söz olabilir Mr sadece rotasyonları içeren (yani dik olan), sonra ters ( Mr ) = Devrik ( Mr ) ve Trans (Ters (böylece Mr Mr_ = _). Ayrıca çeviri bölümü ile kısayolları alabilir ve biliyorsanız ölçeklendirme üniforma FWIW SGL PowerVR grafik kitaplığında, bir transformasyon matrisi, normal dönüşümler ile masraflarından tasarruf etmek bu özellikleri olup olmadığını izlemek için boole tutmak için kullanılır..
Simon F

6

Bunun nedeni normallerin normal vektörler olmamasıdır! Vektörler değil , çiftçilere yol açan çapraz ürünler tarafından yaratılırlar . Cebir bu koordinatlar için çok farklı çalışır ve geometrik dönüşüm farklı davranan sadece bir işlemdir.

Bu konuda daha fazla bilgi edinmek için harika bir kaynak Eric Lengyel'in Grassman Cebir'deki sunumu .


Normaller aynı zamanda sözde yalancılardır. Genelleme ve genel kural olarak, bir çapraz üründen (örneğin düzlemlerden) kaynaklanan her şey benzer şekilde dönüştürülecektir.
Matthias
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.