Einzelnen Beitrag anzeigen

Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Verständnisproblem bei Rotationsmatrizen

  Alt 7. Feb 2007, 12:58
Die Artikel kenne ich.

Ich habe gestern noch einen Algorithmus dafür geschrieben, aber irgendwie scheint da was nicht ganz zu klappen... *kratz*

Delphi-Quellcode:
procedure TMCCamera.Turn(const Pitch, Yaw, Roll: Single);
var Matrix: TMCMatrix4f;
    a, b, c: Single;
begin
  glPushMatrix;
  glLoadIdentity;

  //Laden der Kameraposition
  glRotatef(FPitch, 1, 0, 0);
  glRotatef(FYaw, 0, 1, 0);
  glRotatef(FRoll, 0, 0, 1);

  //Drehen der Kamera um die Winkel Pitch, Yaw, Roll
  glRotatef(Pitch, 1, 0, 0);
  glRotatef(Yaw, 0, 1, 0);
  glRotatef(Roll, 0, 0, 1);

  //Laden der Modelviewmatrix in die Variable Matrix und zurücksetzen der Modelviewmatrix
  glGetFloatv(GL_MODELVIEW_MATRIX, @Matrix[0, 0]);
  glPopMatrix;

  //Berechnung der Winkel Beta, Alpha und Gamma (Bogenmaß)
  b:=ArcSin(min(1, -Matrix[0, 2]));
  a:=ArcSin(min(1, Matrix[1, 2]/Cos(b)));
  c:=ArcSin(min(1, Matrix[0, 1]/Cos(b)));

  //Umrechnung Bogenmaß in Grad
  FPitch:=c*180/Pi;
  FYaw:=b*180/Pi;
  FRoll:=a*180/Pi;
end;
Wenn ich mich nur nach rechts oder links drehe (Yaw verändere) geht das prima. Sobald jedoch Pitch oder Roll dazukommen, bekomme ich völlig unsinnige Werte. Wenn ich beispielsweise aus Nulllage mehrmals hintereinander Camera.Turn(1, 0, 0); aufrufe, müsste sich eigentlich nur FPitch verändern, es verändern sich jedoch alle Winkel, vor allem der Roll Winkel.

EDIT: Es sei dazugesagt, dass Zeilen- und Spaltenindizes hier vertauscht wird. Die Matrizen liegen spaltenweise im Speicher.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat