Szczegółowe informacje na temat tego, co faktycznie robi GPU, gdy przycinamy jednorodną przestrzeń 4D?

10

Uczę się programowalnego potoku renderowania, wdrażając mały program do renderowania. Staram się zaimplementować go w stylu „sprzętowym”. Nie znam jednak potoku GPU i mam problemy z jednorodnym obcinaniem.

Jednorodną przestrzeń strzyżenie zawiera wagowo zmienną którym różne dla każdego wierzchołka. Czy homogeniczna współrzędna każdego obiektu wierzchołka (między matrycą projekcji a jednorodnym podziałem przez w) ma własną przestrzeń obcinania? Jeśli tak, to jak przyciąć linie i trójkąty bliżej Frustum, a nawet rozciągnąć za kamerę (tj. W <= frustum_znear)?

Aktualizacja : ten wątek mówi, że obcinanie w jednorodnej przestrzeni jest bezpośrednio problemem przecięcia w jednorodnej przestrzeni 4D. Co oznacza, że ​​punktem przecięcia jest p_vec4 = t * point1_vec4 + (1 - t) * point2_vec4. Powiedzmy, że mam P0(-70, -70, 118, 120)i P1(-32, -99, -13, -11)w przestrzeni 4D jednorodnej, a punktem przecięcia z plane w = -z(który w NDC jest z = -1) jest (-35, -96, -1, 0.9) t = 0.99, jak uzyskać odpowiedni obiekt wierzchołka w przestrzeni NDC?

A kiedy już otrzymam właściwy punkt przecięcia, czy powinienem wykonać interpolację między obiektami wierzchołków wytworzonymi przez moduł cieniujący wierzchołki, aby uzyskać nowy obiekt wierzchołka?

stanleyerror
źródło
Uderza mnie to jako zbyt wiele pytań na jeden post i prawdopodobnie należy je podzielić. Ogólna zasada to jedno pytanie (lub przynajmniej kluczowe pytanie) na post.
Pikalek
@Pikalek Usuwam pozostałe dwa pytania i staram się, aby ten wątek był rozsądny. Dzięki za radę.
stanleyerror

Odpowiedzi:

1

Obcinanie odbywa się w przestrzeni 3D przed podziałem „w”, a nie w przestrzeni 4D.

GPU znajduje albo tylko bliskie i dalekie płaszczyzny, albo wszystkie 6 płaszczyzn 3D frustum widoku i przypina do tego Geo.

Jeśli podział w został dokonany przed znakiem współrzędnych, obrócono by wierzchołki za okiem / kamerą.

Jeśli do podziału 3D zostaną użyte tylko płaszczyzny bliskie daleko przed podziałem w, wówczas płaszczyzny X&Y mogą polegać wyłącznie na obcinaniu 2D na etapie rasteryzacji.


W jest tylko dzielnikiem projekcji bezpośrednio związanym z Z, a nie czwartym wymiarem. Matryca 4x4 to „hack” obejmujący podział tłumaczeń i projekcji w wygodnym formacie. Działa tylko dlatego, że zakłada się, że pozycje to (x, y, z, 1), a normalne to (x, y, z, 0).

Ale tak naprawdę nie są to 4 niezależne wymiary.

Każda inna wartość „W”, która nie jest równa 1 lub 0, nie ma sensu dla geometrii, jest to wygodny włącznik / wyłącznik do wyłączania tłumaczenia.

Stephane Hockenhull
źródło
0

Jeśli pytasz o konwersję homogenicznych współrzędnych przestrzeni klipu na znormalizowane współrzędne urządzenia (NDC), proces jest następujący: <x y z w> → <x/w y/w z/w>

To pytanie / odpowiedź GDSE na temat Dlaczego przestrzeń klipu jest zawsze nazywana „jednorodną przestrzenią klipu”? może ci również pomóc.

Pikalek
źródło
1
Dzięki za odpowiedź. Jednak mój problem dotyczy interpolacji. Powiedzmy, że dwa punkty e1, e2 pod współrzędną oka 3D są rzutowane na jednorodną przestrzeń przycinania 4D h1, h2. Następnie wykonujemy interpolację w przestrzeni jednorodnej 4D, segment h1-h2 jest przycięty w punkcie 4D h (t) = t * h1 + (1-t) * h2. Bez utraty ogólności, załóżmy, że mamy część h1-h (t) (która jest widoczna) zasilającą etap rasteryzacji. Musimy więc wygenerować odpowiednie właściwości wierzchołków (takie same jak format wyjściowy modułu cieniującego wierzchołki). Moje pytanie brzmi: jak wygenerować właściwości tych nowych wierzchołków?
stanleyerror
Rozumiem, że interpolacja nie jest wykonywana w HCS, ale mogę się mylić. Jeśli nie otrzymujesz więcej / lepszych odpowiedzi, możesz spróbować ponownie przypisać / przeprowadzić migrację do SO.
Pikalek
Ok. Czy mogę bezpośrednio migrować ten wątek do SO, lub muszę ponownie otworzyć tam nowe pytanie.
stanleyerror
Mój błąd polegający na sugerowaniu ponownego zapytania; cross posting jest ogólnie odradzany .
Pikalek
Myślę, że administratorzy mogą migrować.
Sidar,