Dans sommet OpenGL shaders, ce qui est w, et pourquoi dois-je diviser par elle?
-
19-09-2019 - |
Question
void main(void)
{
vec4 clipCoord = glModelViewProjectionmatrix * gl_Vertex;
gl_Position = clipCoord;
gl_FrontColor = gl_Color;
vec3 ndc = clipCoord.xyz / clipCoord.w;
Ainsi, le clipCoord
fait juste transforme standard pipeline fixe.
Pourquoi dois-je diviser par w
, et qu'est-ce que je reçois de cela?
La solution
W est la quatrième coordonnée d'un sommet en trois dimensions; Ce sommet est appelé coordonnée sommet homogène.
En quelques mots, le composant W est un facteur qui sépare les autres composants de vecteur. Lorsque W est de 1,0, les coordonnées de sommet sont homogènes « normalisée ». Pour comparer deux sommets, vous devez normaliser la valeur de W à 1,0.
Pensez au sommet (1,1,1,1). Maintenant, augmenter la valeur de W (p> 1,0). La position normalisée est mise à l'échelle! et il va l'origine. Pensez au sommet (1,1,1,1). Maintenant, diminuer la valeur W (W <1,0). La position normalisée va à un point infini.
En dehors de l'échelle coordonnées sommet, le W de coordonnées est nécessaire car il faut multiplier une matrice 4x4 (la vue du modèle et / ou les matrices de projection), avec une matrice de 4x1 (le sommet).
Bien sûr, le Livre rouge est le guide défini: