gpt4 book ai didi

c++ - 将 lookAt 相机旋转一个角度

转载 作者:行者123 更新时间:2023-11-30 05:39:55 26 4
gpt4 key购买 nike

我在 OpenGL 2.0(固定管道)中构建了一个 lookAt 相机。我的相机跟踪它的位置、观察点和向上 vector 。到目前为止,我已经使用以下代码将相机偏转了一定程度:

void Camera::yaw(float amount)
{
Vector3 rightVec = getRight();
lookAt.z += rightVec.z * amount;
lookAt.x += rightVec.x * amount;
}

当我不关心我到底想偏转多少我的相机时,这种方法似乎工作正常,但现在我想将相机绑定(bind)到机器人的头部,以便当机器人旋转它的头部时,相机相应地偏转.我改变机器人头部角度的方法是保持其旋转度数,然后添加到该数字并使用 glRotatef 更改其旋转度。所以现在为了对齐我的相机和机器人,我需要我的相机 yaw() 函数来接受我想要添加的度数,并从中计算新的 lookAt 值。我试图自己弄清楚数学,但找不到合适的解决方案。如何更改我当前的偏航函数以使用角度增量而不是随机 ammount。

最佳答案

您在这里面临的是将一个点(lookAt)围绕另一个点(位置)旋转特定角度的一般问题。这可以通过首先将问题平移到原点,绕原点旋转然后再平移回来来完成:

lookAt = translate(center) * rotate_y(angle) * translate(-center) * lookAt

(假设translate和rotate_y给出相应的平移/旋转矩阵)。

将所有的东西相乘,会得到这样的结果:

           center.x + (lookAt.x - center.x) * cos(angle) + (lookAt.z - center.z) * sin(angle)
lookAt = [ lookAt.y ]
center.z + (lookAt.z - center.z) * cos(angle) + (center.x - lookAt.x) * sin(angle)

请注意,所有计算都假定(正如您之前所做的那样)向上 vector = [0,1,0]。

关于c++ - 将 lookAt 相机旋转一个角度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32023564/

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