PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Suche ein kleines Beispiel für Reflexionen in Qt/OpenGL


Djon
2008-06-14, 07:37:38
Hallo!

Ich bin auf der Suche nach einem kleinen Beispiel für Reflexionen in Qt/OpenGL. Ich habe mir schon einige Beispiele / Tutorials angeschaut, doch leider liessen sich die nicht wirklich nachvollziehen. Vielleicht könnte einer von euch ein solches Beispielprojekt schnell zusammenstellen. Es wäre optimal, wenn das Beispiel aus einem Spielfeld, einer Spielfigur (Quader) und der entsprechenden Reflexion der Spielfigur auf dem Spielfeld bestehen würde.

Vielen Dank im Voraus!


Mfg Djon

lizardking
2008-06-14, 12:19:13
Schritt-für-Schritt-Tutorial:

http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=26

Die Einbettung in Qt sollte einfach sein, weil die ganzen Systeminitalisierungen aus dem Beispiel weggelassen werden können.
Zum Ansehen des Ergebnisses gibt es den Quellcode auch komplett in unterschiedlichen Ausführungen zum Download.

Djon
2008-06-14, 13:31:20
Hallo!

Danke für den Hinweis. Ich habe zwar das Beispiel schon gesehen, doch leider hing der Ball ziemlich hoch über dem "Boden", somit konnte ich nur die quasi Reflexionen der Lichtquelle auf dem Ball selbst, aber nicht die Reflexionen des Balls auf dem Spielfeld. Werde das Beispiel jetzt mir zur Gemüte führen, andere Beispiele sind noch weiterhin willkommen :biggrin:

Mfg Djon

whtjimbo
2008-06-14, 14:15:48
habe für Dich etwas anderen Ansatz ausgesucht:
http://wiki.delphigl.com/index.php/Tutorial_Wassereffekt

Kurze Erklärung:
Prinzipiell ist das so, dass man die "obere, die gespiegelt werden soll" Teilszene auf der (Wasserbereich/Spielfeld wie Eishockey ...) Ebene, die da runter liegt, als Textur rendert.
Dafür muss man die Teilsezene, die also über dem Feld liegt, zuerst rendern, dann in eine Textur aus dem Framebuffer herauskopieren und dann mit Hilfe der ursprünglichen Kameramatrix, Projektionsmatrix und Verschiebungs/Translationsmatrizen als eine Texturmatrix auf die (Spielfeld)Ebene auftragen.
Die obere Szene muss zusätzlich vor dem Rendern gespiegelt werden. Das wird im Tutorial mit Hilfe der glScalef(1,1,-1) gemacht, achte jedoch drauf ob bei Dir wirklich die Z-Achse wie im Totorial, die sogennante Up-Achse wirklich ist, oft verwendet man die Y-Achse als Up-Achse (dann wäre ein glScalef(1,-1,1) notwendig).
Um nur die obere Szene zu zeichnen und die unter der (Spielfeld) Ebene liegenden Teilszene abzuschneiden, kann man die sogenannten User-Clippingebenen verwenden. Wenn Du dann noch Shader verwendest, muss im Shader gl_ClipVertex verwendet werden.