Tutaj przeczytałem odpowiedź:
Co robi karta graficzna z czwartym elementem wektora jako końcową pozycją?
„Czwarty element jest trikiem pozwalającym śledzić rzut perspektywiczny. Podczas wykonywania rzutowania perspektywicznego chcesz podzielić przez z: x '= x / z, y' = y / z, ale nie jest to operacja, która można zaimplementować za pomocą macierzy 3x3 działającej na wektorze x, y, z. Sztuczka, która stała się standardem w tym zakresie, to dołączenie czwartej współrzędnej, w, i zadeklarowanie, że x, y, z będzie zawsze dzielone przez w po zastosowaniu wszystkich transformacji i przed rasteryzacją. ”
ale nie rozumiem, dlaczego nie możemy podzielić przez Z za pomocą macierzy 3x3?
nie możemy po prostu pomnożyć
1/z 0 0
0 1/z 0
0 0 1/z
dostać [x/z y/z 1]
?
matrix
transformation
projection-matrix
Społeczność
źródło
źródło
Odpowiedzi:
Ponieważ jeśli dzielisz się tylko
[x, y, z]
przezz
siebie[x/z, y/z, 1]
, tracisz rzeczywistą wartośćz
, co jest faktycznie przydatne, jeśli chcesz zrobić wycinanie w płaszczyźnie bliskiej / dalekiej lub wypełnić bufor Z.Dlatego najlepszym sposobem na zachowanie niektórych informacji
z
, przynajmniej na GPU, jest użycie 4 komponentów zamiast 3. W praktyce to, co faktycznie znajduje się w dwóch ostatnich komponentach wektorowych przed podziałem perspektywy, zależy od rodzaju projekcji i efektów chcieć.Na przykład w przypadku rzutu perspektywicznego jest to wynikowy wektor 4-komponentowy:
Po podziale perspektywy wektor staje się:
I
c + d/z
pozostawia nas część z wystarczającą ilością informacji, aby wypełnić bufor Z.źródło
Technicznie możesz to zrobić. Ale po co zawracać sobie głowę? Do czasu ukończenia finału
z
możesz:9 * sizeof(float)
bajty miejsca, wydając cykle na obliczenia1/z
(jeden podział), a następnie wykonując dziewięć mnożników i sześć sum, aby uzyskać końcowy wierzchołek, lubJeden z nich wydaje mi się bardziej optymalny i nie jest pierwszy. Nawet jeśli istnieje zoptymalizowany sprzęt do mnożenia macierzy, co z pewnością tak jest, jest on koncepcyjnie bardziej złożony niż prosty podział.
Plus, matryca 3x3 nie można kodować tłumaczenie, a więc macierz 4x4 (a więc czwarta
w
współrzędnych) jest stosowany wcześniej w rurociągu w każdym razie . Oznacza to, że masz już czwarty komponent, więc możesz go również użyć do przeniesienia użytecznej wartości i podziału z nią.źródło