¿Cómo interpolar vértices al recortar?
Cuando recortamos en un espacio de recorte homogéneo, tenemos que generar un nuevo vértice ubicado en la intersección entre el borde y el plano de recorte. Por tanto, tenemos que interpolar$(x , y, z , w)$posición de ambos vértices para generar la nueva posición del vértice. Parece todo muy bien, pero ¿qué debo hacer cuando el vértice generado después de la interpolación tiene una aw de 0?
No funciona porque la división w hace que el punto vaya al infinito (división por cero).
Entonces, ¿debería asegurarme de no generar nunca vértices con una aw de 0 (cómo?)? ¿O debería lidiar con el nulo w (cómo?)
Se podría decir que esta situación nunca ocurre, pero en realidad sucede, especialmente cuando la z de los vértices se establece en su w, para skyboxes, por ejemplo. En este caso, cuando recortamos contra el plano cercano (z = 0 en el espacio de recorte) e interpolamos la posición, terminaremos con una az de 0 pero también una aw de 0 ...
Respuestas
Los puntos delante de la cámara tienen $w > 0$estrictamente, por definición. Yo diría que si el recorte te da puntos con$w = 0$ entonces algo va mal.
Considere los planos de recorte izquierdo / derecho / superior / inferior. No hay forma de que un triángulo pueda extenderse desde una parte del tronco visible hasta el$w = 0$ plano de la cámara o detrás de él, sin cruzar también fuera de uno de los planos laterales del tronco, o bien el plano cercano, que se encuentra a una distancia positiva $w_\text{near} > 0$.
Mencionaste palcos y escenario $z = w$en la salida del sombreador de vértices. Tal geometría debe cruzar los planos laterales del tronco antes de que pueda llegar al plano cercano. (¿Cómo podría una parte de un skybox acercarse lo suficiente a la cámara para ser recortada por el plano cercano solamente?) Si lo está recortando correctamente contra todos los planos frustum, debe terminar con$w > 0$ en el vértice final.