gpt4 book ai didi

c++ - 如何使用 gluLookAt 在 OpenGL 中围绕某个点旋转相机 View

转载 作者:行者123 更新时间:2023-11-30 16:13:12 25 4
gpt4 key购买 nike

我正在尝试使用 gluLookAt 函数为相机的位置和方向设置正确的 View 转换。在我的程序中,有一个以原点为中心的球体,当按下箭头键时,相机将围绕球体(左、右、上、下)移动。

我尝试使用这种转换:gluLookAt(xc, yc, zc, 0.0, 0.0, 0.0, 0.0, 1,0, 0,0);

为了验证其正确性,我打印了三个轴。它似乎无法正常工作。当我上下移动时,y 轴似乎没有移动。

您能帮助理解这种转变出了什么问题吗?

最佳答案

恒定向上 vector 是错误的!

当您的 xc=0,yc=?,zc=0 (即您在 y 轴上向上/向下移动时),那么您的向上 vector 与您的 View 方向(反)平行,即意味着 gluLookAt 无法使用构建 transform matrix 所需的叉积创建 3 个垂直基 vector 。 。

在这种情况下,向上 vector 应该不同......我通常使用点积

if (dot(a,b)/(|a|.|b|)>0.9)

要检测接近(反)平行 vector 并在您的情况下设置不同的 vector ,其简化如下:

if (fabs(yc*yc)/(xc*xc+yc*yc+zc*zc)>(0.9*0.9)) use different up vector

您可以使用 (+/-1,0,0)(0,0,+/-1) 哪个和哪个符号取决于您的坐标系统约定(因此您的 View 在穿过这个奇点时不会扭曲/镜像/旋转)。

0.9 阈值意味着:

cos(da) = 0.9
da = acos(0.9)
da = 25.84 deg

这是两个 vector 之间允许的最大角度差...

关于c++ - 如何使用 gluLookAt 在 OpenGL 中围绕某个点旋转相机 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58109040/

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