Podczas renderowania scen 3D z transformacjami zastosowanymi do obiektów normalne muszą zostać przekształcone za pomocą transponowanej odwrotności macierzy widoku modelu. Zatem przy normalnym , modelViewMatrix M , przekształcona normalna n ′ jest
Podczas przekształcania obiektów jasne jest, że normalne muszą zostać odpowiednio przekształcone. Ale dlaczego matematycznie jest to odpowiednia macierz transformacji?
Odpowiedzi:
Oto prosty dowód, że wymagana jest odwrotna transpozycja. Załóżmy, że mamy płaszczyznę zdefiniowaną równaniem płaszczyzny , gdzie n jest normą. Teraz chcę, aby przekształcić ten samolot za pośrednictwem macierzy M . Innymi słowy, chcę znaleźć nowe równanie płaszczyzny n ′ ⋅ M x + d ′ = 0, które jest spełnione dla dokładnie tych samych wartości x , które spełniają poprzednie równanie płaszczyzny.n⋅x+d=0 n M n′⋅Mx+d′=0 x
Aby to zrobić, wystarczy ustawić dwa równania równe. (Daje to możliwość arbitralnego skalowania równań płaskich, ale nie jest to ważne dla argumentu.) Następnie możemy ustawićd′=d i odjąć go. Pozostało nam:
Przepiszę to z kropkami wyrażonymi w notacji macierzowej (myślenie o wektorach jako macierzach 1-kolumnowych):
Teraz, aby to spełnić dla wszystkichx , musimy mieć:
Teraz rozwiązuję dla w kategoriach n ,n′ n
Presto! Jeśli punkty są przekształcane przez macierz M , wówczas normalne płaskie muszą przekształcać się przez odwrotną transpozycję M , aby zachować równanie płaskie.x M M
Jest to w zasadzie właściwość produktu kropkowego. Aby iloczyn kropkowy pozostał niezmienny po zastosowaniu transformacji, dwa wektory kropkowane muszą transformować w odpowiadający, ale różne sposoby.
Matematycznie można to opisać mówiąc, że normalny wektor nie jest zwykłym wektorem, ale rzeczą zwaną a kowektorem (inaczej wektor kowariantny, wektor podwójny lub postać liniowa). Kowektor jest zasadniczo zdefiniowany jako „rzecz, którą można kropkować wektorem, aby uzyskać niezmienny skalar”. Aby to osiągnąć, musi transformować za pomocą odwrotnej transpozycji macierzy działającej na zwykłych wektorach. Dotyczy to dowolnej liczby wymiarów.
Zwróć uwagę, że w 3D biwektor jest podobny do kowektora. Nie są do końca takie same, ponieważ mają różne jednostki: kowboj ma jednostki o odwrotnej długości, podczas gdy biwektor ma jednostki długości do kwadratu (pola), więc zachowują się inaczej podczas skalowania. Jednak przekształcają się w ten sam sposób w odniesieniu do ich orientacji, co ma znaczenie dla normalnych. Zwykle nie dbamy o wielkość normalnego (i tak zawsze normalizujemy je do długości jednostki), więc zwykle nie musimy martwić się różnicą między biwektorem a kowektorem.
źródło
Jest tak po prostu dlatego, że normalne nie są tak naprawdę wektorami! Są tworzone przez produkty krzyżowe, w wyniku czego powstają biwektory , a nie wektory. Algebra działa znacznie inaczej dla tych współrzędnych, a transformacja geometryczna to tylko jedna operacja, która zachowuje się inaczej.
Świetnym źródłem informacji na ten temat jest prezentacja Erica Lengyela na temat Grassman Algebra .
źródło