In OpenGL Vertex-Shader, was w, und warum teile ich damit?
-
19-09-2019 - |
Frage
void main(void)
{
vec4 clipCoord = glModelViewProjectionmatrix * gl_Vertex;
gl_Position = clipCoord;
gl_FrontColor = gl_Color;
vec3 ndc = clipCoord.xyz / clipCoord.w;
So ist die clipCoord
ist nur Standard-Fest Pipeline-Transformationen zu tun.
Warum teile ich durch w
, und was bekomme ich daraus?
Lösung
W ist die vierte eines dreidimensionalen Eckpunkt-Koordinate; Dieser Eckpunkt wird als homogenes Eckpunktkoordinate.
In wenigen Worten, die W-Komponente ist ein Faktor, der die anderen Vektorkomponenten aufteilt. Wenn W 1,0 ist, sind die homogenen Scheitelkoordinaten „normalisiert“. So vergleichen Sie zwei Ecken, sollten Sie den W-Wert auf 1,0 normalisieren.
Denken Sie an die Spitze (1,1,1,1). Nun den W-Wert erhöhen (w> 1,0). Die normalisierte Position skaliert! und es auf den Ursprung geht. Denken Sie an die Spitze (1,1,1,1). Nun verringern Sie den W-Wert (W <1,0). Die normierte Position zu einem unendlichen Punkt geht.
Neben Vertex Skalierung Koordinaten Koordinaten W ist notwendig, da Sie eine 4x4-Matrix multiplizieren (die Modellansicht und / oder die Projektionsmatrizen) mit einer 4x1-Matrix (die Spitze).
Natürlich ist das Rote Buch der definitive Führer: