In OpenGL vertex shader, ciò che è w, e perché mi divido da esso?
-
19-09-2019 - |
Domanda
void main(void)
{
vec4 clipCoord = glModelViewProjectionmatrix * gl_Vertex;
gl_Position = clipCoord;
gl_FrontColor = gl_Color;
vec3 ndc = clipCoord.xyz / clipCoord.w;
Quindi la clipCoord
è solo facendo trasforma gasdotti fisse standard.
Perché devo dividere per w
, e cosa ottengo da questo?
Soluzione
W è la quarta coordinata di un tre vertici dimensionale; Questo vertice è chiamato coordinate vertice omogenea.
In poche parole, il componente W è un fattore che divide le altre componenti del vettore. Quando W è 1,0, le coordinate dei vertici sono omogenee "normalizzato". Per confrontare due vertici, si dovrebbe normalizzare il valore di W a 1,0.
Pensate al vertice (1,1,1,1). Ora aumentare il valore W (w> 1.0). La posizione normalizzato è scalare! e sta andando all'origine. Pensate al vertice (1,1,1,1). Ora diminuire il valore W (W <1.0). La posizione normalizzata sta per un punto all'infinito.
Oltre a scalare vertice coordinate, coordinare la W è necessaria poiché è necessario moltiplicare una matrice 4x4 (vista modello e / o le matrici di proiezione) con una matrice 4x1 (vertice).
Naturalmente, il Libro Rosso è la guida definitiva: