Como interpolar vértices ao cortar?
Quando recortamos em um espaço de clipe homogêneo, temos que gerar um novo vértice localizado na interseção entre a aresta e o plano do clipe. Portanto, temos que interpolar o$(x , y, z , w)$posição de ambos os vértices para gerar a nova posição do vértice. Parece muito bom, mas o que devo fazer quando o vértice gerado após a interpolação tem aw de 0?
Não funciona porque a divisão w faz com que o ponto vá para o infinito (divisão por zero).
Portanto, devo garantir que nunca gerei vértices com aw de 0 (como?)? Ou devo apenas lidar com o w nulo (como?)?
Você pode dizer que esta situação nunca acontece, mas realmente acontece, especialmente quando z dos vértices são configurados para seus w, para camarotes, por exemplo. Neste caso, quando recortamos contra o plano próximo (z = 0 no espaço do clipe) e interpolamos a posição, terminaremos com az de 0, mas também aw de 0 ...
Respostas
Pontos na frente da câmera $w > 0$estritamente, por definição. Eu diria que se o recorte está dando pontos com$w = 0$ então algo está errado.
Considere os planos de clipe esquerdo / direito / superior / inferior. Não há como um triângulo se estender desde parte do tronco visível até o$w = 0$ plano da câmera ou atrás dele, sem também cruzar fora de um dos planos laterais do tronco - ou então o plano próximo, que está a alguma distância positiva $w_\text{near} > 0$.
Você mencionou camarotes e configuração $z = w$na saída do sombreador de vértice. Essa geometria deve cruzar os planos laterais do tronco antes de chegar ao plano próximo. (Como parte de uma skybox pode chegar perto o suficiente da câmera para ser cortada apenas pelo plano próximo?) Se você estiver recortando-a corretamente contra todos os planos do tronco, você deve acabar com$w > 0$ no vértice final.