使用DirectX11进行相机3D旋转

时间:2013-10-14 15:22:32

标签: c++ camera rotation directx

我尝试使用C ++中的DirectX11为fbx查看器创建相机。我成功地做了翻译而不是轮换。在我的班级相机中,我有2个地标:我的相机和我的目标(它们都有向上矢量,右矢量,向量矢量和位置)。

要做轮换,我会这样做:

void
    Camera::upRotation(float angle)
{
    using namespace DirectX;
    XMMATRIX    yaw;

    yaw = XMMatrixRotationAxis(XMLoadFloat3(&this->targetUp), XMConvertToRadians(angle));
    XMVector3TransformCoord(XMLoadFloat3(&this->cameraLookAt), yaw);
    XMVector3TransformCoord(XMLoadFloat3(&this->targetLookAt), yaw);
    XMVector3TransformCoord(XMLoadFloat3(&this->cameraRight), yaw);
    XMVector3TransformCoord(XMLoadFloat3(&this->targetRight), yaw);
}

更新我的viewMatrix I:

  1. 规范化矢量View,Up,Right并检查它们是否相互关联 正交(对象和相机)
  2. 更新我的相机位置
  3. 使用新元素填充我的viewMatrix:
  4. [cameraRight.x; cameraUp.x; cameraLookAt.x; 0.0F

    cameraRight.y; cameraUp.y; cameraLookAt.y; 0.0F

    cameraRight.z; cameraUp.z; cameraLookAt.z; 0.0F

    cameraRight。 cameraPos; cameraUp。 cameraPos; cameraLookAt .cameraPos; 1.0f]

    但是当我测试时,旋转不会做任何事情(但它会进入函数)。我究竟做错了什么 ?我的逻辑是正确的,否则我应该用相机吗?

1 个答案:

答案 0 :(得分:0)

如果您愿意,您已经有了一些预先制作的功能:

XMMatrixLookAtLH

XMMatrixLookToLH

他们应该完全按照你的需要做(你有源代码)。