void main(void)
{
vec4 clipCoord = glModelViewProjectionmatrix * gl_Vertex;
gl_Position = clipCoord;
gl_FrontColor = gl_Color;
vec3 ndc = clipCoord.xyz / clipCoord.w;
Ainsi, le clipCoord
ne fait que des transformations de pipeline fixes standard. Pourquoi dois-je diviser par w
, et qu'est-ce que j'en retire?
W est la quatrième coordonnée d'un sommet tridimensionnel; Ce sommet est appelé coordonnée de sommet homogène.
En quelques mots, la composante W est un facteur qui divise les autres composantes vectorielles. Lorsque W vaut 1,0, les coordonnées des sommets homogènes sont "normalisées". Pour comparer deux sommets, vous devez normaliser la valeur W à 1,0.
Pensez au sommet (1,1,1,1). Augmentez maintenant la valeur W (w> 1.0). La position normalisée est mise à l'échelle! et ça va à l'Origine. Pensez au sommet (1,1,1,1). Maintenant, diminuez la valeur W (W <1.0). La position normalisée va à un point infini.
Outre la mise à l'échelle des coordonnées des sommets, la coordonnée W est nécessaire car vous devez multiplier une matrice 4x4 (la vue du modèle et/ou les matrices de projection) par une matrice 4x1 (le sommet).
Bien sûr, le Livre rouge est le guide incontournable: