お世話になっております。
行列の計算に関する関数の扱いについて不明点がありましたので、
質問させていただきます。
現在DirectXで書かれたコードをDXライブラリで書き直している最中ですが、
D3DXVec3TransformCoordを置き換えようとし、
この掲示板の過去ログで見つけた記述より、
VTransformやVectorTransformを代替の関数として置き換えたところ、
望む結果と計算結果が異なったため、使うべき関数を間違えているのか、
ライブラリの仕様なのかが不明で、結局D3DXVec3TransformCoordを使っている状況です。
ほぼD3DXVec3TransformCoordの為だけにd3dx9.hをインクルードする形となっているため、
出来ればVTransform等、DXライブラリ内だけで解決したいと考えています。
もし関数の使い方について間違いがあれば教えていただけると幸いです。
よろしくお願いします。
参考にした過去ログ
ttps://dxlib.xsrv.jp/cgi/patiobbs/patio.cgi?mode=past&no=1554
実際動作中のプログラムにおける該当のコードは以下の通りとなります。
// DXLIB 3.22e VSC++ 64bit
MATRIX BMat;
BMat.m[0][0] = 824.243164f; BMat.m[0][1] = 0.0f; BMat.m[0][2] = 0.0f; BMat.m[0][3] = 0.0f;
BMat.m[1][0] = -200.0f; BMat.m[1][1] = 563.815552f; BMat.m[1][2] = -0.750f; BMat.m[1][3] = -0.50f;
BMat.m[2][0] = -346.410156f; BMat.m[2][1] = -671.929199f; BMat.m[2][2] = -1.29903805f; BMat.m[2][3] = -0.866025388f;
BMat.m[3][0] = 230400.0f; BMat.m[3][1] = 172800.0f; BMat.m[3][2] = 432.0f; BMat.m[3][3] = 576.0f;
VECTOR TransSource = VGet(-477.401154, -467.319366, 0);
VECTOR Output;
VectorTransform(&Output, &TransSource, &BMat);
// Output = {x=-69630.7500 y=-90681.9375 z=782.489502 }
// 望んではいない結果。更に加工が必要?
// Output = VTransform(TransSource, BMat);
// この結果はVectorTransformと同等
D3DXMATRIX mat(
824.243164f, 0.0f, 0.0f, 0.0f,
-200.0f, 563.815552f, -0.750f, -0.50f,
-346.410156f, -671.929199f, -1.29903805f, -0.866025388f,
230400.0f, 172800.0f, 432.0f, 576.0f
);
D3DXVECTOR3 SRC(-477.401154, -467.319366, 0);
D3DXVECTOR3 Vec3Out;
D3DXVec3TransformCoord(&Vec3Out, (D3DXVECTOR3*)&SRC, &mat);
// _D3DVECTOR = {x=-86.0000305 y=-112.000076 z=0.966442585 }
// 望んでいる結果