Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Fireball

Alter Hase

  • »Fireball« ist der Autor dieses Themas

Beiträge: 415

Wohnort: Werne

Beruf: Dipl. Inf.

  • Private Nachricht senden

1

13.11.2013, 12:38

Wie kann man Homogene Koordinaten in Textur Koordinaten umrechnen? [solved]

Hallo zusammen,

ich habe letztens ein Tutorial gelesen und auch nachimplementiert, da gab es dann eine Stelle in der homogene Koordinaten in Textur Koordinaten umgerechnet wurden.

Hier ein Ausschnitt aus dem Tutorial (http://www.rastertek.com/dx11tut27.html)

Zitat


The input reflection position homogenous coordinates need to be converted to proper texture coordinates. To do so first divide by the W coordinate. This leaves us with tu and tv coordinates in the -1 to +1 range, to fix it to map to a 0 to +1 range just divide by 2 and add 0.5.

// Calculate the projected reflection texture coordinates.
reflectTexCoord.x = input.reflectionPosition.x / input.reflectionPosition.w / 2.0f + 0.5f;
reflectTexCoord.y = -input.reflectionPosition.y / input.reflectionPosition.w / 2.0f + 0.5f;


Man könnte jetzt meinen, dass ist doch jetzt die Lösung. Ich würde jedoch gerne nachvollziehen warum das so ist, wenn man durch W dividiert. Normalerweise steht in W doch nur eine 1 als Wert oder liege ich hier falsch?

Schöne Grüße

Fb

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Fireball« (13.11.2013, 18:09)


David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

13.11.2013, 14:06

Das Besondere an homogenen Koordinaten ist ja die zusätzliche Koordinate (hier "w").
Will man daraus wieder "normale" Koordinaten machen, dividiert man alles durch w. Und genau das passiert in deinem Code auch.

Fireball

Alter Hase

  • »Fireball« ist der Autor dieses Themas

Beiträge: 415

Wohnort: Werne

Beruf: Dipl. Inf.

  • Private Nachricht senden

3

13.11.2013, 18:09

Hallo David,

danke für den Tipp. Kann sein, dass es mal mein Mathe Prof vor langer Zeit mal erwähnt hat. :dash:

Wikipedia: http://de.wikipedia.org/wiki/Homogene_Koordinaten

Schöne Grüße

Fb

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

4

13.11.2013, 18:41

Ich würde jedoch gerne nachvollziehen warum das so ist, wenn man durch W dividiert. Normalerweise steht in W doch nur eine 1 als Wert oder liege ich hier falsch?

Da liegst du falsch. Punkte im Worldspace beispielsweise korrespondieren zu Punkten mit §w = 1§ (Richtungsvektoren zu §w = 0§). Nach der Projektionsmatrix ist §w§ aber im Allgemeinen nichtmehr §1§. Genau so funktioniert das mit der Perspektive überhaupt erst. Eine perspektivische Projektion ist ja eigentlich eine nichtlineare Transformation und kann durch eine Matrix allein gar nicht dargestellt werden. Der Trick ist nun, in einem sog. projektiven Raum zu arbeiten, wo eine vierte Koordinate hinzugefügt wird. Division durch diese vierte Koordinate bringt dich zurück auf den Unterraum wo §w = 1§ gilt. Nun kann auch eine gewisse Klasse an nichtlinearen Transformationen über Matrizen beschrieben werden, da die Matrix die §w§ Werte auf linearem Wege manipulieren kann, die bei der Rückprojektion nach 3D (Division durch §w§) dann nichtlineare Auswirkungen haben.

Beispiel: Perspektivische Projektion. In der einfachsten Variante einer perspektivischen Projektion werden x und y einfach durch z dividiert (Objekte weiter weg werden kleiner). Jetzt brauchst du nur eine Matrix, die §\begin{pmatrix}x & y & z & 1\end{pmatrix}^T§ zu §\begin{pmatrix}x & y & z & z\end{pmatrix}^T§ macht. Bei der Rückprojektion wird daraus dann der Punkt §\begin{pmatrix}\frac{x}{z} & \frac{y}{z} & 1 & 1\end{pmatrix}^T§, was einer einfachen perspektivischen Projektion auf die §z = 1§ Ebene entspricht. Die Matrix dazu kommt dir vielleicht bekannt vor:

§\begin{pmatrix}1 & 0 & 0 & 0\\0 & 1 & 0 & 0\\0 & 0 & 1 & 0\\0 & 0 & 1 & 0\end{pmatrix} \begin{pmatrix}x \\ y \\ z \\ 1\end{pmatrix} = \begin{pmatrix}x \\ y \\ z \\ z\end{pmatrix}§

;)

Werbeanzeige