Sto imparando una pipeline di rendering programmabile implementando un piccolo software di rendering. Cerco di implementarlo in uno stile "hardware". Tuttavia, non ho familiarità con la pipeline GPU e ho avuto alcuni problemi di clipping omogeneo.
Lo spazio di ritaglio omogeneo contiene una variabile w che varia ad ogni vertice. La coordinata omogenea di ciascun oggetto vertice (tra matrice di proiezione e divisione omogenea per w) è nel suo spazio di ritaglio? In tal caso, come tagliare le linee e i triangoli più vicini del Frustum o addirittura allungare dietro la telecamera (ovvero w <= frustum_znear)?
Aggiornamento : questo thread afferma che il ritaglio nello spazio omogeneo è direttamente un problema di intersezione nello spazio omogeneo 4D. Ciò significa che il punto di intersezione è p_vec4 = t * point1_vec4 + (1 - t) * point2_vec4
. Diciamo che ho P0(-70, -70, 118, 120)
e P1(-32, -99, -13, -11)
nello spazio omogeneo 4D, e il punto di intersezione con plane w = -z
(che in NDC è z = -1) è (-35, -96, -1, 0.9) t = 0.99
, come ottenere l'oggetto vertice corrispondente nello spazio NDC?
E una volta ottenuto il punto di intersezione corretto, dovrei eseguire l'interpolazione tra gli oggetti vertice prodotti dallo shader di vertici per ottenere un nuovo oggetto vertice?