gpt4 book ai didi

c++ - 计算 3 维中的相机 LookAt 位置 (DirectX)

转载 作者:行者123 更新时间:2023-12-03 12:51:11 24 4
gpt4 key购买 nike

我刚刚开始学习DirectX。目前我有一个立方体和一个相机,我可以通过球体围绕立方体移动。

但现在我想创建一个功能,这样我就可以稍微转动我的相机(左/右/上/下)。我很容易理解如何在 2D 中制作它:我可以在 LookAt 函数中更改 X 和 Y,然后就完成了。我怎样才能做同样的事情,但是是 3D 的?有 3 个维度,我的相机可以拍摄任何角度...

我想我需要找到一个垂直于相机 vector 的平面并像二维一样处理它。 Image

或者我可以做得更简单吗?

最佳答案

View 转换是一个棘手的问题。通常,您会进行模型转换,例如移动、旋转或缩放对象(世界变换)。

但是, View 转换是系统转换。我们可以将其想象为将相机从其位置移动到原点的模型转换。当然,看逆 View 变换更容易。将相机放置在其位置的那个。

这就是我们要做的。假设我们有一个用于定位相机的变换M。相应的 View 变换是其逆变换:V = M^(-1)。如果您想旋转相机对象,只需将旋转矩阵乘以模型变换即可:

M' = R * M

这会在应用M后将相机旋转到其位置。相应的 View 变换仍然是相反的。对 M' 应用逆运算得到

V' = (M')^(-1) 
= (R * M)^(-1)
= M^(-1) * R^(-1)

我们看到M^(-1)是旧的 View 转换。因此:

V' = V * R^(-1)

因此,如果要旋转相机,请在当前 View 矩阵的右侧乘以一个旋转矩阵(带有负角度)。

因此工作流程如下:

  • 在游戏开始时,使用 LookAt 方法设置 View 矩阵。
  • 每次玩家旋转相机时,都会将旋转矩阵乘以当前 View 矩阵。确保角度不要太大。如果每帧旋转 10°,则每秒 60 帧的速度就已经达到 600*。
  • 每当您想要重置相机时,请再次使用 LookAt 方法。

如果要向上和向下转动,请使用XMMatrixRotationX。如果您想左转和右转,请使用XMMatrixRotationYXMMatrixRotationZ 会导致滚动。

关于c++ - 计算 3 维中的相机 LookAt 位置 (DirectX),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19142730/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com