![]() |
(OpenGL) 2x Rotieren um selbes Koordinatensystem
Hiho miteinander!
Ich wurschtel gerade wieder etwas mit OpenGL rum, und stoße mich (wie so oft) an dem Thema Rotation. Folgende Situation: Ich möchte ein via OGl dargestelltes Objekt mit der Maus rotieren lassen. Zu diesem Zweck lasse ich die Szene 2 Mal rotieren, und zwar einmal um die Y-Achse um die Menge, die die Maus links-recht verschoben wurde, und einmal um die X-Achse entsprechend der oben-unten Verschiebung. Das Problem dabei ist leider: Wenn ich bereits ein Mal gedreht habe, ist die Achse um die ich das 2. Mal drehen will mit verdreht, so dass die Rotation um die verdrehte Achse passiert. Sie soll aber jedoch um die Achsen wie sie ursprünglich standen passieren. So, dass immer wenn ich oben-unten verschiebe, das Objekt um die Bildschirmachse gedreht wird. Wie im anderen Fall auch, unabhängig davon, wie das Objekt bereits gedreht ist. Eine Möglichkeit wäre es, die erste Rotation nicht auf Matrizenebene zu machen, sondern bereits in den Vertexdaten. Jedoch wäre das ein Schlag für die Performance, den ich nicht hinnehmen kann (will ;)). Mir fällt grad nichts mehr dazu ein. *braindeadbin* Hülfeee :) (Verwendete Lib ist die dglOpenGL.pas) Danks im Voraus, und gute Nacht! Fabian |
Re: (OpenGL) 2x Rotieren um selbes Koordinatensystem
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe wirklich echte Probleme Dir zu folgen, da das von Dir beschriebene Verhalten doch eigentlich genau das ist, was man erwarten würde. Im Anhang ein lieblos zusammengefrickeltes Sample basierend auf der SVN-Version von easySDL, dass Dir vielleicht weiter hilft. Bedenken solltest Du zwei Dinge: Es ist hilfreich, wenn das Objekt sich im Mittelpunkt befindet. Sprich: Ein Quad von -0.5/-0.5 nach 0.5/0.5 ist leichter zu rotieren als eines von 0/0 nach 1/1. Ansonsten dreht sich das Gebilde halt nicht ums Zentrum, sondern wie ein Planet um die Sonne. Auch solltest Du bedenken, dass Matrix-Operationen eine eigenart haben: A*B != B*A. Es spielt also eine große Rolle um welche Achse Du zunächst drehst. In deinem Fall bietet sich vermutlich an erst die X und dann um die Y-Achse zu drehen. Sollte ich Dich also nun nicht gänzlich Mißverstanden haben und das ganze zum gewünschten Effekt geführt haben, würde ich dir als weiterführende Lektüre die beiden letzteres Tutorials aus der mathematischen Rubrik unserer Tutorials verordnen:
![]() |
Re: (OpenGL) 2x Rotieren um selbes Koordinatensystem
Zitat:
Das selbe gilt verkehrt, wenn die Drehoperationen vertauscht ausgeführt werden. Zumindest die erste Drehung soll also geschehen, OHNE dass sich die Achsen mitdrehen! Zitat:
Zitat:
Zitat:
Zitat:
Ich werd's einfach mal testen, und mich im Vorfeld ganz kräftig bei dir bedanken :) Gruss, Fabian |
Re: (OpenGL) 2x Rotieren um selbes Koordinatensystem
Hi Fabian,
Zitat:
//edit: Oder um ein weiteres Horror-Szenario auszuschließen: Du verwendest schon in deiner Szene glLoadIdentity? Also: Du steuerst die Rotations über zwei(3) Variablen in dem Du einfach mit den dort gespeicherten Positionen das Objekt renderst und im Falle einer Bewegung diese nur bei den Variablen veränderst? Man möge mir verzeihen, wenn ich Dir dein Wissen unterschätzen sollte, aber ich kenne Dich soweit nicht und habe schon die abenteuerlichsten Dinge erlebt ;) Zitat:
![]() Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:08 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz