J'apprends le pipeline de rendu programmable en implémentant un minuscule logiciel de rendu. J'essaie de l'implémenter dans un style «matériel». Cependant, je ne connais pas le pipeline GPU et j'ai eu quelques problèmes d'écrêtage homogène.
L'espace de découpage homogène contient une variable w qui varie à chaque sommet. La coordonnée homogène de chaque objet sommet (entre la matrice de projection et la division homogène par w) est-elle dans son propre espace de découpage? Si oui, comment couper les lignes et les triangles plus près que le Frustum ou même étirer derrière la caméra (c'est-à-dire w <= frustum_znear)?
Mise à jour : ce fil dit que l'écrêtage dans l'espace homogène est directement un problème d'intersection dans l'espace homogène 4D. Ce qui signifie que le point d'intersection est p_vec4 = t * point1_vec4 + (1 - t) * point2_vec4
. Disons que j'ai P0(-70, -70, 118, 120)
et P1(-32, -99, -13, -11)
dans un espace homogène 4D, et que le point d'intersection avec plane w = -z
(qui dans NDC est z = -1) est (-35, -96, -1, 0.9) t = 0.99
, comment obtenir l'objet sommet correspondant dans l'espace NDC?
Et une fois que j'ai obtenu le bon point d'intersection, dois-je faire l'interpolation entre les objets vertex produits par vertex shader pour obtenir un nouvel objet vertex?
la source
Réponses:
L'écrêtage se fait dans l'espace 3D avant la division «w», pas dans l'espace 4D.
Le GPU ne trouve que les plans proche et lointain, ou les 6 plans 3D du tronc de vue et attache la Geo à cela.
Si la division w était effectuée avant que le signe des coordonnées ne se retourne pour les sommets derrière l'œil / la caméra.
Si seuls des plans proches-éloignés sont utilisés pour découper en 3D avant la division w, ils peuvent uniquement compter sur l'écrêtage 2D au stade de la pixellisation pour les plans x & y.
W est juste un diviseur de projection directement lié à Z, pas en fait une 4ème dimension. La matrice 4x4 est un "hack" pour inclure une division de traduction et de projection dans un format pratique. Cela ne fonctionne que parce que les positions sont supposées être (x, y, z, 1) et les normales sont supposées être (x, y, z, 0).
Mais ce n'est pas en fait 4 dimensions indépendantes.
Toute autre valeur pour "W" qui n'est pas 1 ou 0 n'a pas de sens pour la géométrie, c'est un interrupteur marche / arrêt pratique pour désactiver la traduction.
la source
Si vous posez des questions sur la conversion de coordonnées d'espace de clip homogènes en coordonnées de coordonnées de périphérique normalisées (NDC), le processus est le suivant:
<x y z w> → <x/w y/w z/w>
Ce GDSE Q / A sur Pourquoi l'espace de clip est-il toujours appelé «espace de clip homogène»? peut également vous être utile.
la source