Ich bin momentan ein wenig am Verzweifeln. Mein Problem ist bei einem Cubemapping die Lichtquelle so zu platzieren, dass sie nicht mitdreht, sondern immer vom Betrachter aus auf das Objekt, sprich in meinem Fall eine Kugel mit 6 Texturen drauf ausgerichtet ist. Bei einer Drehung soll diese Fix stehenbleiben und das Objekt dreht sich alleine. Mache ich das ohne Cube Map so funktioniert das auch nachdem ich das Licht nach dem erstellen der Projektionsmatrix und anschliessender Modelviewmatrixerstellung per glEnable(GL_Light0) und glEnable(GL_Lighting) gesetzt habe. Bei dem CubeMapping ergibt sich nun das Problem, dass ich die beiden Intitialisierungen der Projektionsmatrix und ModelviewMatrix vertauschen muss. Sprich erst die die ModelviewMatrix intitialisieren und dann die Projektionsmatrix. Dies bedeutet ich drehe nicht mehr das Objekt sondern die Kamera. Setze ich nun das Licht so dreht sich das Licht mit dem Objekt mit, sprich irgendwann sehe ich nur noch den im Schatten des Lichtkegels befindlichen Teil der Kugel. Ich hatte nun versucht zwei Lichtquellen zu setzen, jedoch funktioniert dies nicht, da er immer nur eine Lichtquelle verwendet. (Bei Umkehrung des Vorzeichens für die Z-Richtung bei einer Lichtquelle ist das Licht auch auf einmal auf der anderen Seite, jedoch kann ich nicht zwei Lichtquellen aktivieren). Kennt jemand das Problem und vielleicht auch deren Lösung.
Dies bedeutet ich drehe nicht mehr das Objekt sondern die Kamera
Nein. Die ModelViewMatrix hat ihrem Namen nicht zufällig, sondern weil da die Transformationen für Objekt und die Kamera drinnen stehen. Grundsätzlich ist es so, dass zuerst die ModelViewMatrix angewadt wird, dann wird beleuchtet, dann wird die Projektionsmatrix angewandt. Wenn du objekttransformationen und Kameratransformationen getrennt behandeln willst, gibts soweit ich weiß nur die Möglichkeit, die ModelViewMatrix in zwei Matrizen aufzuteilen (ModelMatrix und ViewMatrix bzw ModelViewMatrix und ModelMatrix, je nachdem wie du´s brauchst).
Gibt es nicht eine einfache Variante mein Licht mitzudrehen?
Mein Source Code sieht momentan so aus:
Code:
glMatrixMode(GL_MODELVIEW); glLoadIdentity;
glMatrixMode(GL_PROJECTION); glLoadIdentity;
glEnable(GL_Light0); glEnable(GL_Lighting);
gluPerspective(1, 1, NearClipping, FarClipping);
//nun neue oder alte Matrix übernehmen if FbTextureLoad then begin if TestsMatrix(FModelViewMatrix)=false then glMultMatrixf(@FModelViewMatrix); end else begin glTranslatef(0, 0, -130); InternalRotate(FRotation); end;
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7809 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Die Position des Lichtes ist relativ zur Modelviewmatrix die in dem Moment aktuell ist, wenn du das Licht enablest. D.h. wenn das Licht sihc mitdrehen soll, musst du das nach dem setzen deiner neuen "Sichtweise/Kameraposition auf die Szene" enablen.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Genau das ist mein Problem. Das Licht dreht sich mit der Drehung der Kugel mit, so dass ich irgendwann die dunkle Rückseite der Kugel sehe. Mein Licht wird dabei nach der Rotation enabled. Ich bekomme egal was ich mache immer dasselbe Ergebnis. Möchte aber im Grunde nur dass ich immer ein gleichmäßig erleuchtetes Objekt sehe, egal ob ich es um 90°, 180°, etc. drehe.
Das Licht soll an der Kamera hängen. Wie gesagt, bei nicht cube Maps habe ich das auch immer hinbekommen, nur bei den CubeMaps mit vertauschter ModelView- und Projektionsmatrix schaffe ich das nicht. Das mit dem gar kein Licht hatte ich auch schon, jedoch würde ich gerne Licht verwenden, da es schon meines Erachtens nach besser aussieht.
Mitglieder in diesem Forum: Google [Bot] und 8 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.