Wenn wir Texturen an stellen mit Perspektive interpolieren so wie wir es bisher gelernt haben, sieht das Ergebnis komisch aus:

Um perspektivisch korrekt auf der Bildebene zu interpolieren, geht man wie folgt vor:

  • Für jeden Vertex wird ein zusätzliches Vertex-Attribut berechnet.
  • Zu jedem weiteren Vertex-Attribut wird der Wert berechnet.
  • Statt der normalen Attribute werden jetzt diese Attribute linear interpoliert.
  • Für jedes Fragment kann dann der perspektivisch korrekt interpolierte Wert des Attributs durch berechnet werden.

Hinleitung zum Problem

Richtig interpoliert wären die Daten in der Geometrie (im Bild Rot mit Parameter ). Wir interpolieren aber auf der Bildebene (im Bild grün mit Parameter ). Man kann erkennen, dass die Interpolationen nicht gleich sind. Im Bild wurde beispielsweise an interpoliert.

Hinleitung zur Lösung

Betrachten wir diese Zeichnung:

Wir können sehen, dass die beiden blauen Dreiecke die selben Seitenverhältnisse haben und die beiden roten Dreiecke auch:

Möchten wir jetzt an der Geometrie interpolieren, machen wir das bekannterweise mit linearer Interpolation entlang eines Parameters :

Die Interpolation in den beiden Räumen ist aber nicht immer gleich:

Wir interpolieren aber auf der Bildebene mit Parameter :

Schlussendlich wollen wir also in Abhängigkeit von ausdrücken.

Wir merken, die Eingabevariablen sind alle bekannt. Das Ergebnis lässt sich dann berechnen durch aufwendiges Umformen. Am Schluss kommt raus:

Damit können wir das Interpolationsgewicht auf der Bildebene in den Eyespace überführen. Nice!

Sei also ein beliebiger Parameter den wir in der Geometrie zwischen 2 Punkten interpolieren wollen. Dann gilt:

Schöner formuliert ergibt das: