Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何使用gluLookAt在OpenGL中围绕点旋转摄影机视图_C++_C_Opengl_Opengl Compat - Fatal编程技术网

C++ 如何使用gluLookAt在OpenGL中围绕点旋转摄影机视图

C++ 如何使用gluLookAt在OpenGL中围绕点旋转摄影机视图,c++,c,opengl,opengl-compat,C++,C,Opengl,Opengl Compat,我试图使用gluLookAt函数为相机的位置和方向设置正确的视图变换。在我的程序中,有一个以原点为中心的球体,当按下箭头键时,相机围绕球体移动(左、右、上、下) 我尝试使用此转换: gluLookAt(xc,yc,zc,0.0,0.0,0.0,0.0,1,0,0,0) 为了验证它的正确性,我打印了三个轴。它似乎不能正常工作。当我上下移动时,y轴似乎没有移动 您能帮助理解该转换的错误吗?常量up向量错误 当您的xc=0,yc=?,zc=0(即您在y轴上/下移动)时,您的上方向向量与视图方向(反)平

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

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

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


您能帮助理解该转换的错误吗?

常量
up
向量错误

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

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

if (dot(a,b)/(|a|.|b|)>0.9)
要检测接近(反)平行向量并在您的情况下设置不同的向量,请简化如下:

if (fabs(yc*yc)/(xc*xc+yc*yc+zc*zc)>(0.9*0.9)) use different up vector
您可以使用
(+/-1,0,0)
(0,0,+/-1)
哪个符号和哪个符号取决于您的坐标系约定(因此您的视图不会在通过该奇点时扭曲/镜像/旋转)

0.9
阈值表示:

cos(da) = 0.9
da = acos(0.9)
da = 25.84 deg
这是两个向量之间允许的最大角度差