大変お世話になっております。
ビュー行列を作成する関数CreateLookAtMatrixの出力結果について疑問があるので質問させていただきます。
まず、前提としてこちらはDirectXの関数D3DXMatrixLookAtLHと同等の関数で合ってますでしょうか。
過去に素のDirectXで作られたプログラムをDXライブラリへ移植している最中なのですが、
CreateLookAtMatrixの出力結果がD3DXMatrixLookAtLHと異なった為、問い合わせさせていただきました。
出力結果に差異が確認できたコードは以下の通りとなっています。
// DXLIB 3.22c
MATRIX mView;
VECTOR EyeVec(0.0f, 225.0f, 389.7f);
VECTOR AtVec(0.0f, 0.0f, 0.0f);
VECTOR UpVec(0.0f, -1.0f, 0.0f);
CreateLookAtMatrix(&mView, &EyeVec, &AtVec, &UpVec);
// DirectX(d3dx9math.h)
D3DXMATRIX mViewDx;
D3DXVECTOR3 EyeVecDx(0.0f, 225.0f, 389.7f);
D3DXVECTOR3 AtVecDx(0.0f, 0.0f, 0.0f);
D3DXVECTOR3 UpVecDx(0.0f, -1.0f, 0.0f);
D3DXMatrixLookAtLH(&mViewDx, &EyeVecDx, &AtVecDx, &UpVecDx);
////コードここまで
//問題の出力
mView.m[3] = {-0.00000000, -1.52587891e-05, 449.990112, 1.00000000}
mViewDx.m[3] = {-0.00000000, 1.52587891e-05, 449.990143, 1.00000000}
ここの配列[3][1]に当たる箇所なのですが、プラスマイナスが反転しています。
docs.microsoft.comによるとD3DXMatrixLookAtLHの計算式は以下の通りと示されていますが、
zaxis = normal(At - Eye)
xaxis = normal(cross(Up, zaxis))
yaxis = cross(zaxis, xaxis)
xaxis.x yaxis.x zaxis.x 0
xaxis.y yaxis.y zaxis.y 0
xaxis.z yaxis.z zaxis.z 0
-dot(xaxis, eye) -dot(yaxis, eye) -dot(zaxis, eye) 1
以上の式をDXライブラリで実装した結果、D3DXMatrixLookAtLHの結果となりました。
私は正直数学として何が正しいかが分からないので、
結果としてはどちらが正しいかについての確認をさせて頂きたいと思います。
よろしくお願いします。