Registriert: Sa Okt 26, 2002 17:14 Beiträge: 188 Wohnort: Hannover/Lüneburg
Ich habe noch 3 kleine Fragen zum Thema Bumpmapping, eher zur Kontrolle.
1.) Wenn ich mein Objekt mit glRotate oder einer Matrix rotiere, dann muss ich im Vertexprogramm auch die Normale und Tangente rotieren und anschließend normalisieren, oder?
2.) Dazu noch: ich bewege meine Kamera, in dem ich deren Bewegungen in der Projektionsmatrix setze. Dies Bewegungen müssen sich ja aber nicht auf die Lichtberechnung auswirken, da sich ja dadurch eh alles gleich bewegt, relativ zueinander also gar nicht. Dann wäre es doch sinnvoll im Vertexprogramm das ganze so zu lösen:
-Vertex, Normale und Tangente mit Projektionsmatrix multiplizieren
-Vertex noch anschließend mit Modelviewmatrix multipliezieren
-Tangente und Normale normalisieren
-weitere Berechnungen ausführen
Oder kann man irgendetwas schneller, effektiver oder eleganter lösen?
[EDIT 26.09.]Der folgende Punkt hat sich erledigt. (VertexPos + (LightPos - [0.5/0.5/0.5])) * (0.5 / LightRange) ist meine Formel für die Umwandlung der Koordinaten[/EDIT]
3.) Lichtintensität: Diese realisiert man am besten mit einer 3 D-Texture, wie ich das gesehen habe. Dazu muss ich ja dann die Vertexkoordinaten als Texturkoordinaten übergeben. Nur wie muss ich diese verändern, dass sie im Lightmapspace sind? Also meine Lichtquelle hat einen Radius, den ich kenne und die 3D-Texture hat eben auch diesen Radius. Lichtposition ist natürlich auch bekannt. Aber so ganz klappte bisher keiner meiner Versuche...
Wäre nett, wenn mir hier nochmal jemand helfen könnte.
_________________ Thunderman
Bei schwierigen Problemen entscheiden wir uns einfach für die richtige Lösung. Klar?
1) Die Normalen und Tangenten müssen mitrotiert werden. Das Normalisieren kann entfallen, weil die Vektoren ja vorher schon normalisiert waren. Alternativ kann man auch die Lichtposition mit der inverseren Matrix transformieren.
2) Die Vertex Position wird mit dem Produkt aus Modelview und Projetionsmatrix multipliziert, aber für die Lichtberechnung wird die original Vertex Position verwendent. Die Normalen und Tangenten brauchen weder transformiert noch normalisiert werden. Im Gegensatz zum OpenGL Licht, daß auf das Sichtfeld bezogen ist, ist beim Tangent Space Bumpmapping die Lichtposition im Koordinatensystem der Welt. Die Normalen und Tangenten dienen nur als Matrix um die Lichtposition zu transformieren. Am Ende vom meinem PDF zum Thema fxPascal ist ein solchen Vertex Programm auch in ARB Form angegeben.
Registriert: Sa Okt 26, 2002 17:14 Beiträge: 188 Wohnort: Hannover/Lüneburg
Ähm, bei 2. stimme ich dir zu, sofern der Mesh nicht bewegt wird. Dann sind transformierte und untransformierte Vertexposition ja nicht mehr identisch. Das hast Du aber ja in Fall 1 schon erläutert, dass es dann reicht den Lichtvektor mit der Inversen Matrix zu transformieren.
Danke.
_________________ Thunderman
Bei schwierigen Problemen entscheiden wir uns einfach für die richtige Lösung. Klar?
Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.