Estoy aprendiendo un canal de renderizado programable mediante la implementación de un pequeño procesador de software. Intento implementarlo en un estilo de 'hardware'. Sin embargo, no estoy familiarizado con la tubería de GPU y tuve algunos problemas de recorte homogéneo.
El espacio de recorte homogéneo contiene una variable w que varía en cada vértice. ¿Se encuentra la coordenada homogénea de cada objeto de vértice (entre la matriz de proyección y la división homogénea por w) en su propio espacio de recorte? Si es así, ¿cómo recortar las líneas y triángulos más cerca del Frustum o incluso estirarse detrás de la cámara (es decir, w <= frustum_znear)?
Actualización : este hilo dice que el recorte en el espacio homogéneo es directamente un problema de intersección en el espacio homogéneo 4D. Lo que significa que el punto de intersección es p_vec4 = t * point1_vec4 + (1 - t) * point2_vec4
. Digamos que tengo P0(-70, -70, 118, 120)
y P1(-32, -99, -13, -11)
en un espacio homogéneo 4D, y el punto de intersección con plane w = -z
(que en NDC es z = -1) es (-35, -96, -1, 0.9) t = 0.99
, ¿cómo obtener el objeto de vértice correspondiente en el espacio NDC?
Y una vez que obtengo el punto de intersección correcto, ¿debo hacer la interpolación entre los objetos de vértice producidos por el sombreador de vértices para obtener un nuevo objeto de vértice?