c++ - 使用 DirectX11 的相机 3D 旋转

标签 c++ camera rotation directx

我尝试使用 C++ 中的 DirectX11 为 fbx 查看器创建一个相机。我成功地进行了翻译,但没有进行轮换。在我的 Camera 类中,我有 2 个地标:我的相机和我的目标(它们都有一个向上 vector 、向右 vector 、lookAt vector 和一个位置)。

为了进行轮换,我是这样进行的:

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. 标准化 vector View、Up、Right 并检查它们是否相互 正交(针对目标和相机)
  2. 更新我的相机位置
  3. 用新元素填充我的 viewMatrix :

[ cameraRight.x ;相机Up.x ; cameraLookAt.x ; 0.0f

相机权利.y ; cameraUp.y ; cameraLookAt.y ; 0.0f

cameraRight.z ; cameraUp.z ; cameraLookAt.z ; 0.0f

相机权利。相机位置;相机向上。相机位置; cameraLookAt .cameraPos ; 1.0f]

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

最佳答案

如果您愿意,您已经为您准备了一些预制函数:

XMMatrixLookAtLH

XMMatrixLookToLH

它们应该完全满足您的需求(并且您拥有它们的源代码)。

关于c++ - 使用 DirectX11 的相机 3D 旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19363625/

相关文章:

java - Android 围绕中心旋转位图而不调整大小

c++ - IOCTL_MOUNTMGR_QUERY_POINTS

c++ - Opengl 片段着色器仅以白色绘制

c++ - 如何在同一系统中为不同的用户帐户注册相同的 COM dll

c# - 根据相对速度和角度找出玩家按下的键

three.js - 如何在three.js中旋转 Sprite 对象?

c++ - 如何强制 C++ 类方法只接受少数整数文字?

c++ - OpenGL 第三人称相机

swift - 相机不会跟随 Sprite

java - 在android中将xml布局的背景设置为相机