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.
Siehe auch
Hinleitung zum Problem
Richtig interpoliert wären die Daten in der Geometrie (im Bild Rot mit Parameter
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
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
Schöner formuliert ergibt das: