2016-07-29 8 views
0

私はモデルのローカルローテーション、グローバルローテーション、グローバルポジションを持つデータセットを持っています。私は各骨の局所的な位置を計算する必要があります。グローバルポジション、グローバルローテーション、ローカルローテーションがある場合のローカルポジションの計算

私は最初にbone.globalpos - bone_parent.globalposを実行しようとしましたが、これらが回転に依存しないことを認識しました。これは親と子の骨の違いです。骨の回転を考慮する方法についてのアドバイスが必要です。ローカル回転とグローバル回転の両方が四元数として格納されます。地元のポーズも回転していない親からわずかの距離に基づいている必要がありますので

私はデータaを保存するには骨ごと

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

を、以下、私がこれを計算する方法で失われています。

例データ:

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) 

答えて

1

私の知る限り見るように、あなたは親の座標系で方向ベクトルを表現したいです。これは、親の逆グローバル回転を用いて方向ベクトルを変換することによって行うことができる。

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

非常に高く評価されています。チャームのように働いた! – Default

関連する問題