「自作」の GL 座標系に回転行列があり、それらを collada 座標系に適用したいと考えています。
GL回転を乗算してコラーダ座標系に変換するには、マトリックスが必要であることを知っています(Zは実際にはUPです)。座標系は、次の図に示されています。
左のシステムから右のシステムへの変換が必要です..理解を深めるために:
ColladaMatrix=GLRotMatrix*NeededMatrix
誰かが私が必要とする行列を知っていますか?
回転行列の基底を変更するには、2 つの行列を掛ける必要があると思います。
実際、ColladaMatrix はそれを行うものです ([col] は collada 座標で、[gl] は GL 座標で意味します)。
y[列] = R[列、列] x[列]
ただし、GL マトリックスを使用する場合は、x[col] を GL 座標に変換してから、GL ベースで回転を適用し、最後に Collada 座標に戻す必要があります。そう
y[col] = B[gl->col] R[gl,gl] B[col->gl] x[col]
そう、
R[col,col] = B[gl->col] R[gl,gl] B[col->gl]
ここで B[gl->col] と B[col->gl] は同じなので、
[1 0 0 [1 0 0
MatrixCollada = 0 0 1 * MatrixGL * 0 0 1
0 1 0] 0 1 0]
それが役に立てば幸い!
注意: 行列を対角化するときも同じことが起こります (これは実際には基底の変更です)。対角化する行列を事前および事後乗算する必要があります。
編集:一般に、行列は座標系から別の座標系にベクトルを送ることができるため、行列の 2 つの座標系を書きました。これにより、より明確になります。
なるほど、質問の回転行列に関する部分を読み違えていたようです。GL座標をCOLLODA座標に変換する回転行列を求めていると思いました。
これらは、左側のシステム (「GL」とラベル付けしたもの) を右側のシステム (「COLLADA」) に変換する行列です。
1 0 0
0 0 1
0 1 0
逆に変換するには、同じ行列を使用します。
DirectX と多くのライブラリとゲーム エンジン (OpenGL ではない) は左手の法則システムで動作し、ほとんどすべての数学モデルとデバイスは右手の法則で動作します。これはベクトルの数学外積と呼ばれます。
そのため、あるシステムを別のシステムに変換して単純な回転をスローすることはできません。
機能する座標系を 1 つ選択し、最も使用する座標系を使用してみてから、ある座標系から別の座標系に変換するための便利な関数をいくつか作成する必要があります。
経験上、この問題を回避するための最良の方法はクォータニオンであり、運命の手のシステムを考慮して正しい行列を選択すると言えます。
回転に問題がある場合 (90° を超えるピッチを使用すると問題が発生します)、ジンバル ロックを検索し、クォータニオンを使用すると、多くの時間と労力を節約できます。
次に、これを見てください:オイラーを四元数に変換し、sin(x) を -sin(x) で変更して、ある座標系を別の座標系に変更します。
よろしくお願いします。