Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Jul 18, 2025 04:15

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 2 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Mo Aug 08, 2005 08:35 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jun 09, 2005 13:48
Beiträge: 117
Wohnort: Sankt Augustin
Hallo,

wie wohl schon so viele vor mir möchte ich mich in meiner 3D Welt bewegen. Ich habe jede Menge Dinge ausprobiert und bin schließlich auf ein Kamera Objekt von Jan Horn gestoßen. Nachdem ich den Aufbau des Objekts, die Wirkungsweise von gluLookAt und das Zusammenwirken dieser beiden verstanden hatte, habe ich es in meinen Code integriert und es lief. Bis auf eine Ausnahme...

Benutzt man die Objektfunktion RotateView oder RotateAroundPoint, dann funktioniert das nur dann, wenn die Drehachse mit dem UpVektor für gluLookAt übereinstimmt. Das hat mich dazu gebracht den UpVektor jedesmal zu ändern, wenn ich über eine andere Achse drehen will. Nun geht das zwar und die Drehung um die neue Achse funktioniert auch, aber wenn der UpVektor geändert wird, wird auch die Szene neue ausgerichtet. Wenn die X-Achse in meiner Ausgangsszene also waagerecht lag (wie es ja sein soll) und die Drehachse die Y-Achse war, wird sie nach einer Änderung der Drehachse in die X-Achse zur Y-Achse und steht jetzt senkrecht. Dadurch drehen sich natürlich auch alle Objekte mit einem mal, was zum springen der Szene bei einer Änderung der Drehachse führt.

Um zu veraunschaulichen was ich meine, hier die Funktion die die Kamera um einen Punkt dreht. Die trigonometrischen Funktionen sind korrekt. Bei der Drehung um die Y-Achse funktioniert auch alle tadellos. Wenn ich um eine andere Achse drehe funktioniert gluLookAt aber nur, wenn ich den UpVector umsetze.

Code:
  1.  
  2. procedure TCamera.RotateAroundPoint(const center: tglvector; const x,y,z: TGLfloat);
  3. var
  4.   PosViewVector: TGLvector;
  5. begin
  6.   // Get the viewVector from our position to the center we are rotating around
  7.   PosViewVector := SubtractVector (Position, Center);  // zieht center von position ab
  8.  
  9.   // Rotate the position up or down, then add it to the center point
  10.   if X <> 0 then
  11.   begin
  12.     Position.Z := Center.Z + sin(X)*PosViewVector.Y + cos(X)*PosViewVector.Z;
  13.     Position.Y := Center.Y + cos(X)*PosViewVector.Y - sin(X)*PosViewVector.Z;
  14.   end
  15.   else if Y <> 0 then
  16.   begin
  17.     Position.Z := Center.Z + sin(Y)*PosViewVector.X + cos(Y)*PosViewVector.Z;
  18.     Position.X := Center.X + cos(Y)*PosViewVector.X - sin(Y)*PosViewVector.Z;
  19.   end
  20.   else if Z <> 0 then
  21.   begin
  22.     Position.X := Center.X + sin(Z)*PosViewVector.Y + cos(Z)*PosViewVector.X;
  23.     Position.Y := Center.Y + cos(Z)*PosViewVector.Y - sin(Z)*PosViewVector.X;
  24.   end;
  25. end;
  26.  


Kennt jemand dieses Kameraobjekt?
Wenn ja: mache ich etwas falsch oder kann man dieses Problem umgehen?

Danke


Zuletzt geändert von Andyh am Mi Aug 10, 2005 15:09, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Aug 08, 2005 20:15 
Offline
DGL Member

Registriert: Mi Apr 27, 2005 19:24
Beiträge: 24
Tipp ein paar Zeilen Code würde vielleicht manchen helfen dein Problem zu erkennen!


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 2 Beiträge ] 
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

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.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.007s | 14 Queries | GZIP : On ]