Dans sommet OpenGL shaders, ce qui est w, et pourquoi dois-je diviser par elle?

StackOverflow https://stackoverflow.com/questions/2422750

  •  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?

Était-ce utile?

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:

  

Livre rouge Annexe

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top