Oto, co mój wykładowca powiedział mi podczas zajęć:
Bierzemy pod uwagę tylko macierze 4 * 4. Służą do obracania, skalowania lub translacji obiektów (lub dowolnej kombinacji tych operacji). Macierze są również wykorzystywane później przy implementacji modelu wirtualnej kamery. Jeśli nie znasz różnicy między transformacją wektorową a transformacją punktową, sprawdź ją.
Nie mogę znaleźć odpowiedzi i założyłem konto dla tej witryny tylko na to pytanie.
Odpowiedzi:
Oto prosta odpowiedź.
W 4D, aby móc je pomnożyć przez macierz 4x4, wektory są reprezentowane jako (x, y, z, 0), a punkty są reprezentowane jako (x, y, z, 1).
Ponieważ czwarty rząd macierzy 4x4 reprezentuje translację macierzy, powyższe reprezentacje sprawiają, że translacja wpływa na punkty, ale wektory nie.
Oba wektory i punkty mają jednak wpływ na obrót, skalowanie itp.
Zastrzeżenie:
Trzeba głębiej dyskutować, jeśli spodziewamy się, że wektory będą miały określone właściwości. Na przykład, jeśli transformujesz normę trójkąta za pomocą tej samej macierzy, transformujesz wierzchołki trójkąta, prawdopodobnie nie będzie to już normalny wektor tego trójkąta. Jest tak, ponieważ wektory normalne mają swego rodzaju odwrotną zależność od wierzchołków, z których są obliczane.
źródło
Z tego, czego się nauczyłem, odkąd jestem również studentem, jest to, że chcesz pracować z macierzami , aby traktować rotacje, skalowanie i tłumaczenia w ten sam sposób, to znaczy mnożenie przez macierz (tj. 4 x 4 matrycy).4×4 4×4
Pamiętaj, że bez tych macierzy tłumaczenia byłyby reprezentowane przez sumowanie z wektorem, podczas gdy obroty i skalowanie byłyby reprezentowane przez mnożenie odpowiednio z wektorem i współczynnikiem skalarnym.4×4
Teraz pytanie brzmi: jak przejść z układu współrzędnych 3D do układu 4D ? Odpowiedź brzmi: „ jednorodne współrzędne ”.
Co to znaczy? Konstruujemy macierze do reprezentowania rotacji, skalowania i translacji, dlatego używamy mnożenia macierzy do reprezentowania transformacji (np. Rotacje, skalowanie itp.). Sposób, w jaki konstruujemy je indywidualnie, jest bardziej szczegółowy, ale możesz to zobaczyć w Internecie.4×4
W tym momencie mamy macierze i wektory 3D, jeszcze nieprzydatne, ponieważ nie można pomnożyć macierzy 4 × 4 i wektorów 3 D , ponieważ wymiary się nie zgadzają. Właśnie dlatego, gdy pracujemy z jednorodnymi współrzędnymi, musimy również przekonwertować podane punkty 3D na odpowiadające im punkty 4D.4×4 4×4 3D
Jak to robimy?
Rozróżniamy wektory kierunku i położenia . Wektory kierunkowe, jak sama nazwa wskazuje, mają kierunek, na który wskazują; dbamy również o ich długość, ale tłumaczenia nie mają na nie wpływu, ponieważ nie dbamy o ich pozycję. Wektory położenia (lub po prostu „punkty”) można tłumaczyć lub przenosić; są zwykle reprezentowane w odniesieniu do początku, tj. jako wektor od początku do samego punktu.
Przekształcamy 3D wektorów kierunkowych przez dodanie jako 4 th współrzędna wektora odpowiadającego jednorodnego: dodamy do zera, bo to w zasadzie eliminuje efekt tłumaczenia. Podobnie robimy z wektorami pozycji, ale zamiast 0 dodajemy 1 , z przeciwnego powodu.0 4 0 1
Na przykład, jeśli mamy wektor kierunku v = ( v 1 v 2 v 3 ) , przekształcamy go, wykonując v ′ = ( v 1 v 2 v 3 0 ) . Podobnie, gdybyśmy mieli wektor punktowy u = ( u 1 u 2 u 3 ), zmienilibyśmy go na u ′ = ( u 1 u 2 u 3 1 )3D v=⎛⎝⎜v1v2v3⎞⎠⎟ v′=⎛⎝⎜⎜⎜v1v2v30⎞⎠⎟⎟⎟ u=⎛⎝⎜u1u2u3⎞⎠⎟ u′= ⎛⎝⎜⎜⎜u1u2)u3)1⎞⎠⎟⎟⎟
Uwaga: aby przekonwertować homogeniczne współrzędne z powrotem na odpowiednie współrzędne , nie można po prostu usunąć współrzędnej 4 t h , chyba że nadal jest równa odpowiednio 1 (lub 0 ).3 D. 4 t godz 1 0
źródło
Jeśli spojrzysz na definicję wektora i punktu, to wektor to:
Chodzi o to:
Można więc powiedzieć, że wektor to kierunek ze skalą, a punkt to lokalizacja.
Tak więc, jeśli transformujesz wektor, po prostu go obracasz i skalujesz. Za pomocą punktu również go tłumaczysz (obrót i skalowanie punktu odbywa się wokół początku, ponieważ jest to tylko miejsce, którego sam punkt nie może zostać obrócony).
Najczęściej wektor i punkt są umieszczane w tym samym pojemniku, w którym wektor składa się z 4 elementów. Jedyną różnicą jest składnik w. Jeśli składowa w wynosi 0, to jest to kierunek. Jeśli jest to 1, to wektor jest punktem.
Przyczynę tego można znaleźć w samej macierzy. Wykorzystuje sposób zwielokrotnienia wektora przez 4 elementy z macierzą 4x4. Jeśli nie wiesz, jak to działa, proponuję szybkie google.
Jak widać, jeśli ostatnim składnikiem jest 0, to masz mnożenie przez 0, a zatem wynikiem jest 0 i nie ma tłumaczenia.
Ułatwia to grafikę komputerową z obiektami wielokątnymi. Masz tę samą macierz transformacji do transformacji pozycji, ale także normalnych. Ponieważ normalne mają ustawiony komponent w na 0, a pozycja w komponent wynosi 1, normalne są po prostu obracane (a także skalowane, co może prowadzić do dziwnych rzeczy, więc przez większość czasu normalna jest normalizowana po. t naprawdę zaleca się stosowanie tej samej macierzy dla pozycji i rotacji z powodu dziwnych rzeczy! Spójrz na komentarz @JarkkoL.) i pozycje są tłumaczone (i obracane i skalowane wokół źródła).
Mam nadzieję, że nie popełniłem błędu: P, a to ci pomogło!
źródło