プログラムのスケルタルアニメーションは正常に機能していましたが、フレーム間の各ボーンに格納されている4x4マトリックス間を線形に補間していました。
bMatrix bMathbMathInterpolate(bMatrix const * const p_a,bMatrix const * const p_b, float p_delta)
{
bMatrix l_mat;
for(unsigned char i = 0;i lessthan (edit: sorry less than symbol break it) 16;i++)
l_mat.m_values[i] = bMathInterpolate(p_a->m_values[i], p_b->m_values[i], p_delta);
return l_mat;
}
もちろん、マトリックスに大量の回転がない限り、これは問題ありません。モデルは、キーフレーム間でわずかに押しつぶされます。
そこで、 4x4マトリックスの回転部分のみをクォータニオンに変換し、SLERPを実行し、マトリックスの回転部分のみをクォータニオンのマトリックスバージョンに置き換える別の補間アルゴリズムを作成しました。マトリックスの変換部分については、線形に補間しました。
結果を見ると、これは明らかに間違っています!!! :'(
(私とは異なり)これらすべてをよく理解している場合は、おそらく「いいえ!それはあなたのやり方ではありません!」と考えているでしょう。-もしそうなら、私が間違っていることを教えてください!!
四元数と3x3行列の間で相互に変換する方法を説明するリソースしか見つからないため、行列の変換部分をどうするかわかりません。
どんな助けでも大歓迎です!!!!