2016-07-29 23 views
0

Ich habe eine Reihe von Daten, wo ich die lokalen Rotationen, globale Rotationen und globale Positionen für ein Modell habe. Ich muss die lokalen Positionen für jeden Knochen berechnen.Berechnung von lokalen Positionen, wenn ich globale Positionen, globale Rotationen und lokale Rotationen habe

Ich versuchte zuerst bone.globalpos - bone_parent.globalpos und erkannte dann, dass diese nicht von Rotationen abhängig sind, also ist dies der Unterschied zwischen dem Eltern- und dem Kindknochen. Ich brauche einen Ratschlag, wie man die Drehungen auch für die Knochen berücksichtigt. Sowohl die lokalen als auch die globalen Rotationen werden als Quaternionen gespeichert.

Ich speichere die Daten ein folgt pro Knochen

bone.globalpos (Vector3) 
bone.globalrot (Quaternion) 
bone.localpos (Unknown, but should be a Vector3) 
bone.localrot (Quaternion) 

Da die lokale Haltung soll auch auf Rotation beruht und nicht nur die Entfernung von der Mutter, ich bin verloren, wie diese zu berechnen.

Beispieldaten:

bone_parent.globalpos = (-1.252995 8.46457E-05 37.22802) 
bone_parent.globalrot = (-0.5405273 -0.4560547 -0.4560547 0.5405273) 
bone_parent.localpos = (0 0 0) (I provided) 
bone_parent.localrot = (1.0 0.0 0.0 0.0) 
bone_child.globalpos = (-1.252995 5.001462 37.22802) 
bone_child.globalrot = (0.4948359 0.505096 -0.505096 0.4948359) 
bone_child.localpos = (0 0 5.001377) This is what I need to calculate, but here is the answer to what I'm trying to get 
bone_child.localrot = (0.07421875 0.9970703 0 0) 

Antwort

1

Soweit ich sehe, möchten Sie den Richtungsvektor in dem Koordinatensystem der Mutter auszudrücken. Dies kann durch Transformieren des Richtungsvektors mit der inversen globalen Rotation der Eltern erfolgen.

child.localPos = transform(conjugate(parent.globalRot), child.globalPos - parent.globalPos) 
+0

Sehr geschätzt! Lief wie am Schnürchen! – Default