Hallo Leute!
Ich stehe vor einem sehr kniffligen Problem.
Unzwar habe ich ein Gelenkpunktsystem (wenn man so will auch Skelettsystem) programmiert.
Ich habe das so programmiert, dass Gelenk Nr. 0 als Urgelenk auf x=0.00001 y=0.00001 z=0.00001 liegt. Alle anderen Gelenke sind in Form eines Treesystems an dieses (bzw. das jeweils übergeordnete gebunden) Gelenk gebunden.
An jedes dieser Gelenke können nun 3D-Objekte gebunden werden. Dabei verhalten sich die Objekte zum übergeordneten Gelenk so, als wenn das Gelenk selbst den Mittelpunkt des Raumes darstellt (also 0,0,0 xyz). Wende ich einen Rotationswinkel an. So wird dieser einwandfrei interpretiert.
Zum besseren Verständnis das übergeordnete Gelenk wird als Meistergelenk bezeichnet. Jedes Gelenk hat einen Eigenwinkel und einen Realwinkel. Der Realwinkel ergibt sich aus dem Realwinkel des wiederum übergeordneten Gelenks und dem Eigenwinkel. Die Eigenposition eines Gelenks verhält sich dabei so, als wenn deas Meistergelenk die koordinaten 0,0,0 hätte. Die Eigenwinkel werden auf die Eigenposition angewendet.
Man kann sich das ungefähr so vorstellen:
Koordinaten immer x,y,z
Gelenk[0] Meistergelenk -; Eigenposition 0,0,0; Realposition 0,0,0;
Gelenk[1] Meistergelenk 0; Eigenposition 1,0,0; Realposition 1,0,0;
Gelenk[2] Meistergelenk 1; Eigenposition 2,0,0; Realposition 3,0,0;
Das ist jetzt mal stark vereinfacht.
Auf diesen Gelenkkörper wende ich nun eine Globale Rotation. Dazu lasse ich erst die Gelenkpunktpositionen ermitteln und anschließend die Globalen Winkel auf den Gelenkkörper anwenden. Stelle ich nun die Gebundenen Objekte zum Beispiel eine Pyramide dar, so wende ich in der Translationsmatrix folgende Winkel an
für die Y-Rotation: Gelenk[i].Realwinkel.Y+GlobalWinkelY
für die Z-Rotation: Gelenk[i].Realwinkel.Z+GlobalWinkelZ
für die X-Rotation: Gelenk[i].Realwinkel.X+GlobalWinkelX.
Lasse ich nun das Gelenksystem insgesamt um jede Achse einzeln rotieren funktionert alles wunderbar. Auch wenn ich das System um die Y und Z Achse gleichzeitig rotieren lasse funktioniert alles gut. Alle Objekte verhalten sich wie erwartet. Und passen ihre Lage entsprechend den Winkeln korrekt an.
Aber sobald ich irgendwie die Roation um die X-Achse dazunehme gerät alles aus den Fugen.
Falls jemand dieses Problem kennt, gelöst hat oder weiss wo man Hilfe findet wäre ich echt dankbar.
Ich verlier nämlich langsam den Verstand. Sollte ich die Lösung selber finden werde ich die entsprechenden Roationsberechnungen hier als CODE hinterlegen für andere Suchende.
Danke
Martin