Comment interpoler les sommets lors du découpage?
Lorsque nous découpons dans un espace de découpe homogène, nous devons générer un nouveau sommet situé à l'intersection entre l'arête et le plan de découpe. Il faut donc interpoler le$(x , y, z , w)$position des deux sommets pour générer la nouvelle position des sommets. Cela semble bien beau, mais que dois-je faire lorsque le sommet généré après l'interpolation a un aw de 0?
Cela ne fonctionne pas car la division w fait aller le point à l'infini (division par zéro).
Dois-je donc m'assurer de ne jamais générer de sommets avec aw de 0 (comment?)? Ou devrais-je simplement traiter le w nul (comment?)?
Vous pourriez dire que cette situation ne se produit jamais, mais cela se produit réellement, surtout lorsque les z des sommets sont mis à leur w, pour les skyboxes par exemple. Dans ce cas, lorsque nous coupons contre le plan proche (z = 0 dans l'espace du clip) et interpolons la position, nous nous retrouverons avec az de 0 mais aussi aw de 0 ...
Réponses
Les points devant la caméra ont $w > 0$strictement, par définition. Je dirais que si l'écrêtage vous donne des points avec$w = 0$ alors quelque chose ne va pas.
Considérez les plans de découpe gauche / droite / haut / bas. Il n'y a aucun moyen qu'un triangle puisse s'étendre d'une partie du tronc visible, au$w = 0$ plan de la caméra ou derrière lui, sans passer également à l'extérieur d'un des plans latéraux du tronc - ou bien le plan proche, qui se trouve à une certaine distance positive $w_\text{near} > 0$.
Vous avez mentionné les skybox et le décor $z = w$dans la sortie de vertex shader. Une telle géométrie doit traverser les plans latéraux du tronc avant de pouvoir atteindre le plan proche. (Comment une partie d'une skybox pourrait-elle se rapprocher suffisamment de la caméra pour être coupée par le plan proche uniquement?) Si vous la coupez correctement contre tous les plans de frustum, vous devez vous retrouver avec$w > 0$ dans le sommet final.