Pregunta

void main(void)
{
  vec4 clipCoord = glModelViewProjectionmatrix * gl_Vertex;
  gl_Position = clipCoord;

  gl_FrontColor = gl_Color;

  vec3 ndc = clipCoord.xyz / clipCoord.w;

Así que la clipCoord sólo está haciendo las transformaciones de tuberías fijas estándar. ¿Por qué divido por w, y lo que puedo obtener de esto?

¿Fue útil?

Solución

W es la cuarta coordenada de un vértice de tres dimensiones; Este vértice se llama coordenada de vértice homogénea.

En pocas palabras, el componente W es un factor que divide a los otros componentes del vector. Cuando W es 1,0, las coordenadas de vértices homogéneos son "normalizado". Para comparar los dos vértices, se debe normalizar el valor de W a 1,0.

Piense en el vértice (1,1,1,1). Ahora aumentar el valor W (w> 1,0). La posición normalizada está escalando! y va al origen. Piense en el vértice (1,1,1,1). Ahora disminuir el valor W (W <1,0). La posición normalizada se va a un punto infinito.

Aparte de la ampliación vértice coordina, coordinar el W es necesario ya que hay que multiplicar una matriz de 4x4 (la vista del modelo y / o las matrices de proyección) con una matriz de 4x1 (el vértice).

Por supuesto, el Libro Rojo es la guía definitiva:

  

Libro Rojo Apéndice

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top