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?

War es hilfreich?

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:

  

Rotbuch Anhang

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top