SetCameraViewMatrix()で直接ViewMatrixを設定した場合、GetCameraPosition()でカメラの座標をとってこようとしても、カメラの初期位置、つまり何も設定していない座標が取得されます。
これはバグなのでしょうか、仕様なのでしょうか。
以下に簡易コードを添付します(以下コードではカメラは移動し続けるわけではありません)。
//移動方向取得
MATRIX cameraWorldMat = MInverse(GetCameraViewMatrix());
VECTOR right = VScale(VTransformSR(VECTOR_X_AXIS, cameraWorldMat), 100.0f);
VECTOR moveVec = VECTOR_ZERO;
if (CheckHitKey(KEY_INPUT_RIGHT))
{
moveVec = VAdd(moveVec, right);
printfDx(_T("Push[Right]\n"));
}
else if (CheckHitKey(KEY_INPUT_LEFT))
{
moveVec = VAdd(moveVec, VScale(right, -1));
printfDx(_T("Push[Left]\n"));
}
//本来取得されるべき移動後の座標
VECTOR movedPos = VAdd(GetCameraPosition(), moveVec);
printfDx(_T("MovedPosition = (%.2f, %.2f, %.2f)\n"), movedPos.x, movedPos.y, movedPos.z);
SetCameraViewMatrix(MInverse(MGetTranslate(moveVec)));
//実際の取得した座標
VECTOR camPos = GetCameraPosition();
printfDx(_T("CameraPosition = (%.2f, %.2f, %.2f)\n"), camPos.x, camPos.y, camPos.z);
取得する方法は直接行列の[3][0], [3][1], [3][2]のX,Y,Z要素から持ってくるしかなさそうだなと考えています。
検証のほう、よろしくお願いいたします。