2017-10-18 30 views
3

En fonction d'un nombre de sources NDC diffère de l'espace de clip en ce que NDC est juste l'espace de clip APRÈS la division par le composant W. Les primitives sont découpées dans l'espace du clip, ce qui en OpenGL est de -1 à 1 le long des axes X, Y et Z (Edit: c'est faux, voir la réponse). En d'autres termes, l'espace du clip est un cube. L'écrêtage est effectué dans ce cube. Si elle tombe à l'intérieur, elle est visible, si elle tombe à l'extérieur, elle n'est pas visible. Donc, prenons cet exemple simple, nous regardons de haut en bas sur un tronc de visionnage, en bas de l'axe Y négatif. Le HALFFOV est à 45 degrés, ce qui signifie que le NEAR et le RIGHT sont tous les deux identiques (dans ce cas, la longueur 2). Le point d'exemple est (6, 0, -7).Explication de la division perspective?

enter image description here

Maintenant, voici la matrice de projection en perspective:

enter image description here

Pour simplifier, nous allons utiliser un rapport d'aspect de 1: 1. Alors:

RIGHT = 2 
LEFT = -2 
TOP = 2 
BOTTOM = -2 
NEAR = 2 
FAR = 8 

remplissage Ainsi, dans nos valeurs, nous obtenons une matrice de projection:

enter image description here

Maintenant, nous ajoutons l'homogène W à notre point, qui était (6, 0, -7) , et obtenez get (6, 0, -7, 1).

Maintenant, nous multiplions notre matrice avec notre point, ce qui donne (6, 0, 6.29, 7). Ce point maintenant (le point après avoir été multiplié par la matrice de projection, est censé se situer dans "l'espace de clip".) Supposément le découpage est fait à ce stade, déterminer si un point se trouve à l'intérieur ou à l'extérieur du division avec W. Voici comment il regarde dans « l'espace clip »:

enter image description here

des sources que j'ai vu la coupure se fait à ce stade, car il semble que ci-dessus, avant de diviser par W. Si vous divisez par W NOW, le point finit dans la partie droite du cube de l'espace de clip, c'est pourquoi je ne comprends pas pourquoi tout le monde dit que la division de perspective est faite APRES l'espace de découpage. le point se trouve complètement à l'extérieur et serait ju dged être en dehors de l'espace de coupure, et non visible. Cependant, après la division en perspective, division par W, voici à quoi il ressemble:

enter image description here

Maintenant, le point se trouve dans le cube de l'espace clip, et peut être jugé être à l'intérieur, et visible. C'est pourquoi je pense que la division perspective est faite AVANT le découpage, parce que si l'espace de découpage est de -1 à +1 dans chaque axe, et que l'étape de découpage vérifie ces dimensions, pour qu'un point soit à l'intérieur de ce cube par W, sinon presque tout point se trouve en dehors du cube de l'espace de découpage et n'est jamais visible. Alors, pourquoi tout le monde dit que l'espace de découpage est le premier résultat de la matrice de projection, et alors seulement il y a division de perspective (division par W) qui se traduit par NDC?

+0

double possible de [Comprendre la matrice de projection] (https://stackoverflow.com/questions/6111721/understanding-the-projection-matrix) –

+0

J'ai beaucoup appris juste à partir de la question elle-même. –

Répondre

5

Dans l'espace de plan, l'écrêtage n'est pas effectué sur un cube unité. Cela se fait contre un cube de côté w. Les points sont à l'intérieur de la zone visible si chacune de leurs coordonnées x, y, z est plus petite que leur coordonnée w.

Dans l'exemple que vous avez, le point [6, 0, 6.29, 7] est visible parce que les trois coordonnées (x, y, z) sont plus petits que 7.

Notez que pour les points à l'intérieur de la zone visible, c'est exactement équivalent à test x/w < 1. Les problèmes commencent avec des points en avant du plan éloigné, car ils peuvent être projetés dans la zone visible par la division homogène parce que leur valeur w est négative. Comme nous le savons tous, diviser par un nombre négatif dans une inégalité changerait l'opérateur, ce qui est impraticable sur le matériel.

: D'autres lectures
OpenGL sutherland-hodgman polygon clipping algorithm in homogeneous coordinates
Why clipping should be done in CCS, not NDCS
Why does GL divide gl_Position by W for you rather than letting you do it yourself?

+0

Merci beaucoup. Donc le découpage n'est pas fait contre un cube de -1 à +1, c'est fait contre un cube -w à + w? Eh bien, cela a un sens complet. Cependant, je pense que c'est trompeur car partout l'espace de clip est défini comme un cube de -1 à +1. – Zebrafish

+0

Habituellement, la zone visible dans l'espace NDC varie de -1 à 1. Comme vous n'avez fourni aucun lien dans la question, je n'ai pas pu vérifier ces questions. – BDL

+0

Je suis sûr que je continue à le voir, même si je suis heureux maintenant je comprends. Derhass: "La plupart des gens imaginent l'espace du clip comme étant le cube [-1,1]^3. Cependant, ce n'est pas l'espace du clip" – Zebrafish