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?
źródło
Odpowiedzi:
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.
źródło
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.
źródło