Estou aprendendo um pipeline de renderização programável implementando um pequeno renderizador de software. Eu tento implementá-lo em um estilo de 'hardware'. No entanto, não estou familiarizado com o pipeline da GPU e tive alguns problemas de recorte homogêneo.
O espaço de recorte homogêneo contém uma variável w que varia em cada vértice. As coordenadas homogêneas de cada objeto de vértice (entre a matriz de projeção e a divisão homogênea por w) estão em seu próprio espaço de recorte? Se sim, como cortar as linhas e triângulos mais perto do que o Frustum ou até esticar atrás da câmera (ou seja, w <= frustum_znear)?
Atualização : esta discussão diz que o recorte no espaço homogêneo é diretamente um problema de interseção no espaço homogêneo 4D. O que significa que o ponto de interseção é p_vec4 = t * point1_vec4 + (1 - t) * point2_vec4
. Digamos que eu tenha P0(-70, -70, 118, 120)
e P1(-32, -99, -13, -11)
no espaço homogêneo 4D, e o ponto de interseção com plane w = -z
(que no NDC é z = -1) seja (-35, -96, -1, 0.9) t = 0.99
, como obter o objeto de vértice correspondente no espaço do NDC?
E depois de obter o ponto de interseção correto, devo fazer a interpolação entre objetos de vértice produzidos pelo vertex shader para obter um novo objeto de vértice?
fonte
Respostas:
O recorte é feito no espaço 3D antes da divisão 'w', não no espaço 4D.
A GPU encontra apenas os planos próximo e distante, ou todos os 6 planos 3D do frustum da vista e prende o Geo a isso.
Se a divisão w fosse feita antes que o sinal de coordenadas mudasse para vértices atrás do olho / câmera.
Se apenas planos mais próximos forem usados para recortar 3D antes da divisão w, eles poderão depender apenas do recorte 2D no estágio de rasterização para os planos x e y.
W é apenas um divisor de projeção diretamente relacionado a Z, e não uma quarta dimensão. A matriz 4x4 é um "hack" para incluir uma divisão de tradução e projeção em um formato conveniente. Funciona apenas porque as posições estão implícitas em (x, y, z, 1) e as normais estão implícitas em (x, y, z, 0).
Mas na verdade não são quatro dimensões independentes.
Qualquer outro valor para "W" que não seja 1 ou 0 faz pouco sentido para a geometria, é um conveniente botão liga / desliga para desativar a conversão.
fonte
Se você está perguntando sobre a conversão de cordas homogêneas de espaço de clipe em cordas de coordenadas normalizadas de dispositivos (NDC), o processo é:
<x y z w> → <x/w y/w z/w>
Este GDSE P / A em Por que o espaço do clipe é sempre referido como "espaço de clipe homogêneo"? Também pode ser útil para você.
fonte