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

Aktuelle Zeit: So Apr 28, 2024 19:22

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



Ein neues Thema erstellen Auf das Thema antworten  [ 1 Beitrag ] 
Autor Nachricht
BeitragVerfasst: So Jan 15, 2012 00:53 
Offline
DGL Member

Registriert: Mo Apr 27, 2009 11:19
Beiträge: 35
Hallo alle miteinander,

ich habe eine Frage zu Rotationen mit QQuaternionen und QSlidern. Und zwar möchte ich mit 3 Slidern für jeweils jede Achse mein Objekt rotieren.
Also mit Hilfe des ersten Sliders kann man das Objekt um x rotieren, mit dem zweiten um y und mit dem dritten um z. Das hatte ich eigentlich auch schon mit QPushButtons realisiert. Der Code für die zuständige slot-Funktion sah so aus:

Code:
  1.  
  2. void OpenGLScene::rotiere_x_plus()
  3. {
  4.     qreal anglex = 2;
  5.     test->rotation *= (QQuaternion::fromAxisAndAngle(QVector3D(1,0,0),anglex));
  6.     update();
  7. }
  8.  
  9. void OpenGLScene::rotiere_x_minus()
  10. {
  11.     qreal anglex = -2;
  12.     test->rotation *= (QQuaternion::fromAxisAndAngle(QVector3D(1,0,0),anglex));
  13.     update();
  14. }
  15.  


Es läuft zwar mit PushButtons alles fein, aber die Slider-Variante scheint mir doch intuitiver zu sein. Es wirkt einfach besser und schöner.
Meine Slot-Funktionen hierfür habe ich folgendermaßen implementiert:

Code:
  1.  
  2.  
  3. QQuaternion cam_temp_x;
  4. QQuaternion cam_temp_y;
  5. QQuaternion cam_temp_z;
  6.  
  7. .....
  8.  
  9. void OpenGLScene::rotiere_x(int a)
  10. {
  11.     qreal anglex = a;
  12.     cam_temp_x = (QQuaternion::fromAxisAndAngle(QVector3D(1,0,0),anglex));
  13.     test->rotation = cam_temp_x * cam_temp_y * cam_temp_z;
  14.     update();
  15. }
  16.  
  17. void OpenGLScene::rotiere_y(int a)
  18. {
  19.     qreal angley = a;
  20.     cam_temp_y = (QQuaternion::fromAxisAndAngle(QVector3D(0,1,0),angley));
  21.     test->rotation = cam_temp_x * cam_temp_y * cam_temp_z;
  22.     update();
  23. }
  24.  
  25. void OpenGLScene::rotiere_z(int a)
  26. {
  27.     qreal anglez = a;
  28.     cam_temp_z = (QQuaternion::fromAxisAndAngle(QVector3D(0,0,1),anglez));
  29.     test->rotation = cam_temp_x * cam_temp_y * cam_temp_z;
  30.     update();
  31. }
  32.  


Hier ist aber das Problem, dass wenn ich mich nicht an die Reihenfolge halte (erst um x rotieren, dann um y und dann um z), ich ein ganz komisches Rotationsverhalten bekomme. Als zweite Möglichkeit hatte ich noch das gedacht:

Code:
  1.  
  2.  
  3. QQuaternion cam_temp_x;
  4. QQuaternion cam_temp_y;
  5. QQuaternion cam_temp_z;
  6.  
  7. .....
  8.  
  9. void OpenGLScene::rotiere_x(int a)
  10. {
  11.     qreal anglex = a;
  12.     test->rotation = (QQuaternion::fromAxisAndAngle(QVector3D(1,0,0),anglex));
  13.     update();
  14. }
  15.  
  16. void OpenGLScene::rotiere_y(int a)
  17. {
  18.     qreal angley = a;
  19.     test->rotation = (QQuaternion::fromAxisAndAngle(QVector3D(0,1,0),angley));
  20.     update();
  21. }
  22.  
  23. void OpenGLScene::rotiere_z(int a)
  24. {
  25.     qreal anglez = a;
  26.     test->rotation = (QQuaternion::fromAxisAndAngle(QVector3D(0,0,1),anglez));
  27.     update();
  28. }
  29.  


Hier wird zwar immer korrekt rotiert, aber das Objekt springt immer wieder zurück, da ja der Wert test->rotation vorher nicht überschrieben wurde.

Bei der Methode mit den QPushButtons konnte man mit einem konstanten Wert das Objekt drehen. Bei den Slidern ist das nicht möglich, da ja der wert sich beim sliden ändert. Zwar könnte man für die angle-Variablen konstante Werte einsetzen. Dann hätte ich aber das Problem dass beim Vor und Zurücksliden das Objekt sich die ganze Zeit die eine Richtung drehen würde.

Also es wäre ganz toll wenn ihr vielleicht eine Idee hättet wie man das Problem lösen kann.

Danke schonmal für eure Antworten


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 19 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:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.011s | 17 Queries | GZIP : On ]