Registriert: Do Jun 09, 2005 13:48 Beiträge: 117 Wohnort: Sankt Augustin
Hallo, hallo,
ich habe mir eine camera Klasse von einem anderen Programmierer geklaut und in mein Programm integriert. Diese Klasse hält die von gluLookAt benötigten Informationen bereit und verändert sie je nach Benutzerwunsch. Wird gluLookAt mit diesen Informationen aufgerufen, dann sollte sich immer die richtige Ansicht darbieten.
Informationen: Kameraposition, Blickrichtung und Upvector.
Die von dieser Klasse bereitgestellten Funktionen sind das bewegen der Kamere links/rechts, des zoomen der Kamera in den Bildschirm und wieder heraus und das drehen der Kamera um jede beliebige Achse.
Ich bin allerdings zu der Ansicht gelangt, dass das drehen der Kamera um die Achsen nie richtig ausprobiert oder getestet wurde. Bei einem Upvector 0,1,0 funktioniert die Drehung um die Y-Achse, bei einem Upvector von 1,0,0 um die X-Achse und bei einem Upvector von 0,0,1 um die Z-Achse. Habe ich den Upvector immer gleich (bei mir 0,1,0), stellt sich die Drehung nicht rund dar sondern unsymmetrisch. Ausserdem kippt die Drehung bei einem bestimmten Punkt um 180°.
Man muss den Upvector also auch anpassen und nicht nur die Kameraposition oder die Blickrichtung neu berechnen.
Ich habe auch schon einige Hinweise darauf gefunden, aber keine richtige Anleitung.
Kann mir vielleicht jemand sagen wie ich den Upvector anpassen muss bei
1. einer Drehung der Kameraposition um einen Punkt
2. eine Drehung des Blickpunktes um die Kamera
3. einer Bewegung der Kamera hoch/runter (an der Y-Achse entlang)
Das wäre super,
Danke
Hier die Klasse:
Code:
// die aus meiner unit OpenGLUtil benötigten definitionen:
type
TGLVector =packedrecord
x,y,z: GLfloat;
end;
// die kameraklasse
unit CameraClass;
interface
Uses DglOpenGL, OpenGLUtil, Windows, Classes;
type TCamera =object
Position : TGLvector;// The camera's position
View : TGLvector;// The camera's View
UpVector : TGLvector;// The camera's UpVector
procedure PositionCamera(PositionVec: TGLvector;
ViewVec: TGLvector;
upVec: TGLvector);
procedure RotateView(const X, Y, Z : glFloat);
procedure MoveCameraByMouse(MouseX, MouseY,
MiddleX, MiddleY:integer);
procedure RotateAroundPoint(const Center : TGLvector;
const X, Y, Z : glFloat);
procedure PanCamera(speed : glFloat);// schwenken der kamera links/rechts
procedure LiftCamera(speed : glFloat);// nach oben/unten bewegen
procedure ZoomCamera(speed : glFloat);// in den bildschirm rein/aus dem bildschirm raus
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.