En vertex shaders de OpenGL, lo que es W, y por qué lo divido por ella?
-
19-09-2019 - |
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?
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: