Perspektivisches Texturemapping


Wieso keine lineare Interpolation ?

Jetzt, da wir mit dem Gouraudshading umgehen können, sticht einem natürlich sofort die Idee für Texturemapping ins Auge. An den Eckpunkten unserer Dreiecke haben wir ja die u- und v – Koordinaten der Textur gespeichert. Was bietet sich nun besser an, als diese einfach linear zu interpolieren, so wie wir es beim Gouraudshading mit den Farbwerten gemacht haben ?

Die Praxis belehrt einen manchmal ziemlich gut und erzeugt folgendes:



Irgendwo muss ein Denkfehler sein, aber nur wo ?

Perspektivische Projektion

Wie in den vorherigen Abschnitten immer wieder drauf aufmerksam gemacht wurde, sei es beim Z – Buffer oder auch beim Gouraud Shading, kann man unter perspektivischer Projektion nun einfach mal nicht linear interpolieren. Um dieses zu verstehen, schauen wir uns nun mal die Mathematik dahinter an.

Die einfachste perspektivische Projektion hat die Form:

Dabei ist nun x' unsere Koordinate auf dem Bildschirm. Wollen wir wieder in den Objektraum zurück, so stellen wir die Gleichung einfach um und erhalten:

Nun benötigen wir die Definition von einer linearen Funktion. Diese ist gegeben durch:

A und B sind Konstanten. Sie beschreibt also, wie sich y ändert, wenn wir x ändern. Machen wir uns diese Tatsachen zu nutze und drücken unser x im Objektraum durch seine Tiefe z aus.

Nun substituieren wir x durch die zweite Gleichung und erhalten:

Diese Funktion ist nicht mehr linear und auch der Grund dafür, wieso wir unter perspektivischer Projektion nicht linear interpolieren dürfen. Stellt man die Gleichung noch weiter um, so erhält man am Ende:

Aus dieser Gleichung wissen wir nun, dass der Kehrwert linear ist, was eine große Hilfe ist. Befinden wir uns nämlich im Bildraum, so wissen wir das wir den Kehrwert von z nun hier linear interpolieren dürfen. Anders ausgedrückt, an jeder Stelle, wo wir die x Koordinate vom Objektraum haben wollen, bilden wir den Kehrwert vom Kehrwert und erhalten unser gesuchtes z was wir mir x' multiplizieren und nach der ersten Gleichung unser x bekommen. Ein anderer interessanter Fakt aus Gleichung 1 ist, dass linear sein muss, da x' im Bildraum linear ist. Hieraus kann man nun folgern, dass auch und linear ist. Somit folgt nun endgültig:

Analoges gilt für die v- und y- Koordinate in der Interpolation. Das Resultat sieht dann so aus:



Approximation

Natürlich sind wir jetzt gezwungen unseren „schnellen“ Integer Bereich zu verlassen. Stellt sich die Frage, ob wir die Zahlreichen Divisionen für jeden Texel vermeiden können ? Wenn wir schon so fragen, ja natürlich. Wir Approximieren einfach, in dem wir uns einen festen Abstand wählen, die u- und v – Koordinaten berechnen und zwischen diesem dann linear interpolieren.

Beispiel von linearer Interpolation mit dem Abstand 16:



Das Resultat kann sich immer noch sehen lassen, und wenn man möchte verkleinert man einfach den Abstand, um einen besseren perspektivischen Effekt zu erzielen.

Index