Ok, erstmal ein "Hallo" an alle^^
Dies ist nun mein erster Post in diesem Forum - und auch meine erste Gelegenheit, mich vor der Irrlicht-Community zu blamieren

. Wie dem auch sei, vor einiger Zeit habe ich den Entschluss gefasst, mal etwas Dreidimensionales zu programmieren. Zunächst wollte ich es dabei direkt mit DirectX probieren; schließlich gibt es ja jede Menge Tutorials und Bücher zu diesem Thema - aber ich war wohl etwas zu zuversichtlich: kaum eines der Beispielprogramme aus dem Netz, den gekauften Büchern oder gar dem SDK selbst ließ sich bei mir compilieren! Es fehlten ständig irgendwelche libarys oder header, welche ich mir dann nachträglich aus dem Internet beschaffen musste; manchmal weigerte sich die IDE auch einfach, eine ganz klar im Zielverzeichnis zu findende Datei anzuerkennen ~.~ Da aufgrund dessen nur ein Bruchteil der Beispiele nach langem Suchen und Klicken funktionieren wollte, war wohl klar, dass ich so nichtmal an 3 Dimensionen denken könnte - geschweige denn daran, eine ganze Engine zu schreiben, die auch funktionieren würde. Eine (leistungsfähige) Engine musste her - so bin ich dann auf Irrlicht gestoßen. Soviel also dazu^^
Um mich mit der Engine vertraut zu machen, sah ich mir erst einmal die Tutorials an, welche zu meiner großen - positiven - Überraschung auch alle einwandfrei liefen (was ich ja von den reinen DirectX Codes zuvor nicht gewöhnt war - das kam dem "Licht am Ende eines dunklen Tunnels" gleich

). Bevor ich allerdings mein erstes "TestProjekt", eine Art "Weltraum[un]simulation" (aufgrund der Einfachheit: kaum Physik, etc.), wirklich beginnen konnte, wollte ich erstmal die Grundgelegenen Bewegungsoperationen testen (von denen ich mathematisch in etwa... Null Ahnung habe), wobei mir schnell auffiel, dass in den Tutorials nicht wirklich auf die Rotation von SzenenKnoten eingegangen wurde (Jemand, der sich schon damit beschäftigt, und sich diese Engine zur Vereinfachung "zu Nutze macht", wird sich eine solche Operation wohl mit Leichtigkeit selber schreiben können), was einem normalen Programmierer nicht zur Last fällt, mir als Noob jedoch etwas zusetzt (ich wollte das "selbstschreiben" der Operationen eigentlich vermeiden).
Nun, die Positionsverschiebung an sich ist kein Ding. Die Rotation "funktioniert". Nur - sie funktioniert nicht so, wie sie eigentlich sollte... Der SzenenKnoten in meinem Programm(chen) rotiert scheinbar nicht um die Achsen des eigenen Koordinatensystems - es wirkt viel mehr so, als würde die Richtung jenes garnicht aktualisiert, sodass zwar die Position des Ursprunges im Knoten liegt, die Achsen aber immer die Ausrichtung des Übergeordneten Koordinatensystems haben.
Folgende Abbildungen sollten das Problem beschreiben:
Links sieht man die Situation, wie ich sie gerne hätte, rechts die bestehende Situation. Dabei zeigt die Ausrichtung des Schiffes die Bewegungsrichtung an, während das kleine "Achsensystem" die für eine Rotation verwendeten Achsen abbildet

Erstaunlich finde ich dabei, dass mein Objekt (das Schiff) um die
eigene X-Achse rotiert, wie links dargestellt, gleichzeitig allerdings bei der Rotation um seine Z und Y Achse ein Verhalten aufweist, das dem Sachverhalt in der Rechten Abbildung gleichkommt !?
Wie auch immer, der Teil des Programms der für die Bewegung zuständig ist sieht wie folgt aus:
Code:
(. . .)
core::vector3df position = node->getPosition();
core::vector3df rotation = node->getRotation();
float speed = 0.0f;
(. . .)
core::matrix4 mat;
mat.setRotationDegrees(rotation);
core::vector3df tmp(0,0,-1);
mat.transformVect(tmp);
position += speed*tmp;
node->setRotation(rotation);
node->setPosition(position);
(. . .)
Kann mir jemand sagen wo hier der Fehler liegt? Oder wie man etwas "richtig" rotieren lässt? Würde mich über Hilfe freuen

mfG Syntax