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?

È stato utile?

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:

  

Red Book Appendice

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top