Hallo zusammen,
nach stundenlanger tüftelei steck ich fest. ich denke einfach ich hab ein brett vor dem kopf, denklockade. Hoffentlich könnte ihr s ie beseitigen!
Folgendes problem:
Ich habe Positions und Orientierungsdaten aufgenommen und möchte meine OpenGl Kamera nach diesen Daten ausrichten.
Alles gut und schön nur leider gibts ein kleinen Schönheitsfehler, der mir einen Strich durch die Rechnung macht:
Die Daten sind bezogen auf ein anderes Koordinaten system. Es ist ein rechtshändriges System , was jedoch die Z nach unten, die X Achse nach links und die Y Achse nach "hinten" hat.
Eigentlich kein Grund zu panik, dreh ichs eben in das normal karthesische von Opengl.
was ich erreichen möchte ist, dass ich die daten so benutzen kann ,als wären sie normale opengl koordinaten, so dass ich meine szene auf die normalen opengl koordinaten ausrichten kann.
Also das Koordinatensystem erst um -180° um die Z achse gedreht und dann um -90° um X gedreht. nun sind die beiden koordinatensysteme deckungsgleich..
Mein programm setzt also erstmal die modelview matrix und läd die einheitsmatrix. dann werden die beiden drehungen per glrotate nacheinander durchgeführt und schließlich noch eine translation um den 0 punkt versatz auszugleichen.
Dann kommen die Positionsdaten ins Spiel. Sie werden in eine Rotationsmatrix eingelesen und dann mit der aktuellen modelview matrix multipliziert. Danach werden noch zusätzliche Translation durchgeführt.
Achja die Objekte werden vorher in die szene geladen, also sind die vertexdaten dann relativ zum opengl urpsrung.
Meine Frage ist nun : ist das der richtige weg ?
ist die "kompensation" der koordinatensysteme richtig?
muss es vor oder nach dem multiplizieren der positions/rotationsdaten durchgeführt werden ?
muss eine kamera bewegung vorher oder hinter durchgeführt werden?
bewegt sich meine "camera" also jetzt relativ zum opengl urpsrung, wenn ich neue daten einlese?
Zur illustration hier der code
Code: glMatrixMode( GL_MODELVIEW ); glLoadIdentity(); //Koordinatensystem drehen glRotatef(-180.0f,0.0f,0.0f,.0f); glRotatef(-90.0f,1.0f,0.0f,0.0f); // eigentliche Drehung der Kamera, aber im anderen Koordinatensystem glMultMatrixf(Matrix); //Translation der Kamera glTranslatef(m_Position.x, m_Position.y, m_Position.z);
Dateianhänge: |
Dateikommentar: Überführung des Koordinatensystems

steps.gif [ 12.49 KiB | 10472-mal betrachtet ]
|
|