Detalhes do que a GPU realmente faz quando recorta um espaço homogêneo em 4D?


10

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?


Isso me parece muitas perguntas para um único post e provavelmente deve ser dividido. A regra geral é uma pergunta única (ou pelo menos uma questão-chave) por postagem.
Pikalek

@Pikalek Retiro as outras duas perguntas e tento tornar esse tópico razoável. Obrigada pelo Conselho.
Stanleyerror

Respostas:


1

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.


0

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ê.


1
Obrigado pela sua resposta. No entanto, meu problema é sobre a interpolação. Digamos que dois pontos e1, e2 sob a coordenada ocular 3D sejam projetados no espaço de recorte homogêneo 4D h1, h2. Então fazemos interpolação no espaço homogêneo 4D, o segmento h1-h2 é cortado no ponto 4D h (t) = t * h1 + (1-t) * h2. Sem perda de generalidade, suponha que tenhamos h1-h (t) parte (que é visível) alimentando o estágio de rasterização. Portanto, precisamos gerar as propriedades correspondentes do vértice (o mesmo que o formato de saída do vertex shader). Minha pergunta é como gerar as propriedades desses novos vértices?
Stanleyerror

Meu entendimento é que a interpolação não é feita no HCS, mas posso estar enganado. Se você não obtiver mais / melhores respostas aqui, tente / efetue a migração / migração para o SO.
Pikalek

Está bem. Posso migrar diretamente esse segmento para o SO ou preciso reabrir uma nova pergunta lá.
Stanleyerror 30/05

Meu erro ao sugerir que você pergunte novamente; a postagem cruzada geralmente é desencorajada .
Pikalek # 30/16

Eu acho que os administradores podem migrar tho.
Sidar
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.