SetCameraViewMatrix()後ではGetCameraPosition()でカメラ座標は取得できない?

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
KRNKRS
記事: 40
登録日時: 10年前
連絡を取る:

SetCameraViewMatrix()後ではGetCameraPosition()でカメラ座標は取得できない?

#1

投稿記事 by KRNKRS » 7年前

タイトルの通りなのですが、
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);
SetCameraViewMatrix()後のGetCameraPosition()で取れないとなると、
取得する方法は直接行列の[3][0], [3][1], [3][2]のX,Y,Z要素から持ってくるしかなさそうだなと考えています。

検証のほう、よろしくお願いいたします。

“C言語何でも質問掲示板” へ戻る