2016-04-19 3 views
1

をマージ....基本的に、どのように私は、このような四元数を組み合わせることができますすべての回転が連結されますか?私がこれまでに2つのアプローチを試してみましたGLMクォータニオン回転は、私は現在、四元が増殖方法を見つけ出すとOpenGLのためのGLMで互いに連結しようとしていますが、私は見つけるすべてのスレッドが唯一の1つのクォータニオン回転を言及

glm::quat quaternions[4]; // how to merge all 4 quaternions? 

:たとえば、これらのアプローチの

// approach 1: 
glm::quat quaternions[4]; 
glm::quat q = glm::quat(glm::vec3(0)); 
q *= quaternions[0]; 
q *= quaternions[1]; 
q *= quaternions[2]; 
q *= quaternions[2]; 
glm::mat4 matrix = glm::toMat4(q); 

// approach 2: 
glm::quat quaternions[4]; 
glm::mat4 matrix = glm::mat4(1.0f); 
matrix = matrix * glm::toMat4(quaternions[0]); 
matrix = matrix * glm::toMat4(quaternions[1]); 
matrix = matrix * glm::toMat4(quaternions[2]); 
matrix = matrix * glm::toMat4(quaternions[2]); 

どれも私が期待していた結果が得られているように見えるん。

編集:私はassimpとGLMを使用して、COLLADAモデルを肌しようとしていたことを追加する必要があります。アプローチ1と2は、私が探している正確な解決策を与えてくれます。私は最終的に何が起こっていたかを考え出しより試行錯誤の3日後

+1

私の四元コードと間違ってませんでした4つのクォータニオンを持っていますか?彼らは何を表していますか?また、どのような結果が期待されていますか? –

+0

クォータニオンのマージ結果をどのようにテストしましたか?例を投稿していただけますか? – Unick

+0

@NicolBolas assimpは、スキンニングのための骨の回転を表すために四元数を使用します。そして骨は親の子孫を持っているので、子供の回転のために四元数を組み合わせる必要があります。私はそれが不必要であると思ったので、私は最初にこれを追加しなかった、申し訳ありません。基本的に私のメッシュはこれらのクォータニオンで変形されますが、私のカスタムマトリックスでは問題ありません。だから、明らかに私は四元数乗算ステップで何か間違ったことをやっている – Jas

答えて

1

。私の骨のいくつかは、物事を止めていたミキサーの「ロール」を持っていました。私のメッシュでは、上下逆さまの骨も問題でした。だから、assimpロードされたアニメーションとの問題を抱えている人のために:

  • は、あなたのバインドは、最初
  • はあなたが逆さまに骨を持っていないことを確認してくださいポーズを確認し、これはいくつかの問題を引き起こす可能性があります。
  • チェックし、すべての骨の情報(私の場合はそれが問題を引き起こして、「ロール」だった)

だから何もあなたがなぜはるかに良い質問は...ある...

関連する問題