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?
fuente
Respuestas:
El recorte se realiza en el espacio 3D antes de la división 'w', no en el espacio 4D.
La GPU encuentra solo los planos cercanos y lejanos, o los 6 planos 3D de la vista frustum y sujeta el Geo para esto.
Si la división w se realizara antes de que el signo de coordenadas volteara para vértices detrás del ojo / cámara.
Si solo se utilizan planos cercanos y lejanos para el recorte 3D antes de la división w, entonces puede depender únicamente del recorte 2D en la etapa de rasterización para los planos x e y.
W es solo un divisor de proyección directamente relacionado con Z, no una cuarta dimensión. La matriz 4x4 es un "truco" para incluir una división de traducción y proyección en un formato conveniente. Funciona solo porque las posiciones están implícitamente como (x, y, z, 1) y las normales están implícitas como (x, y, z, 0).
Pero en realidad no son 4 dimensiones independientes.
Cualquier otro valor para "W" que no sea 1 o 0 tiene poco sentido para la geometría, es un conveniente interruptor de encendido / apagado para desactivar la traducción.
fuente
Si está preguntando sobre la conversión de las coordenadas homogéneas de espacio de recorte en coordenadas de coordenadas de dispositivo normalizadas (NDC), el proceso es:
<x y z w> → <x/w y/w z/w>
Este GDSE Q / A sobre ¿Por qué el espacio de clip siempre se conoce como "espacio de clip homogéneo"? También puede ser útil para usted.
fuente