Hi Fabian,
Zitat:
Jain ^^. Stell dir vor, du drehst ein Objekt mit der Maus mit einer Linksbewegung um ca. 90° um die Y-Achse. Du lässt die Maus los, und willst nun das Objekt so neigen, dass es seine Oberseite preis gibt. Also rein intuitiv mit einer Mausbewegung nach unten. Was passiert aber nun? Das Objekt neigt sich nach links! Weil durch die vorige Drehung ja die X-Achse verdreht wurde, und von nun an auf einmal die Z-Achse die richtige Wahl wäre um das Objekt wie gewünscht zu neigen.
Das selbe gilt verkehrt, wenn die Drehoperationen vertauscht ausgeführt werden.
Zumindest die erste Drehung soll also geschehen, OHNE dass sich die Achsen mitdrehen!
*kopfkratz* Liegt vielleicht an meinem Koffeinentzug, aber genau das sollte er ja machen. Erst ein Rotate um die X-Achse, dann eines um die Y-Achse und das Ergebnis sollte genauso sein, wie Du es beschrieben hast. Ich vermute, dass der Mittelpunkt des Objektes (Pivot-Punkt) außerhalb des Weltursprunges liegt und Du deswege ein merkwürdiges Ergebnis erhälst.
//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:
Lieben Dank dafür - leider habe ich die verwendeten Units nicht, bzw. kenn ich (noch) keine Bezugsquelle. Aber das ist u.U. auch nicht mehr nötig (s.u.)
Stoss Dich nicht so sehr an der
Unit. Ich bin selbst Linux-Nutzer und kann daher nur vernünftig mit SDL arbeiten. EasySDL sind einige Units, die ein schnelles Prototyping ermöglichen sollen, damit ich innerhalb von kurzer Zeit ein Beispiel zusammenkloppen kann. Schau Dir also das DrawScene an und haus in deine Render-Prozedure und lasse die Variablen rotx,roty dort verändern, wo Maus oder Tastatur-Ereignis geschieht. Entweder klappts dann oder ich stehe ich immer noch aufm Schlauch
(EasySDL ist Bestandteil der DGLSDK, die von mir verwendete Version stammt allerdings aus der
SVN-Version und kann daher massiven Veränderungen unterliegen:
DGLSVN)
Zitat von
Phobeus:
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.
Das hatte ich bereits bedacht, so dass ich erst rotiere, und dann verschiebe. (Mathe-LK'ler 8))
Zitat:
Dieses Zurücksetzen war mit dem Welt-KO-System ja nicht so einfach drin, da dort ja die "Kamera" an und für sich verdreht wird.
Hm? Das Zurücksetzen sollte aber nur dann interessant werden, wenn Du mehre Objekte in der Szene hast. Dann kannst Du ja mit glPushMatrix bzw. glPopMatrix die aktuelle World-Matrix einfrieren, ein paar Operationen (meist scale oder rotate) durchführen und wieder die ursprüngliche Matrix zurück setzen. Aber egal, ob ich aufm Schlauch stehe oder nicht... die beiden Tutorials werden Dir offentlich weiterhelfen. Insbesondere dann, wenn sich das Objekt irgendwann auch einmal frei durch die Welt bewegen soll.