openGL移动摄像机

openGL移动摄像机,opengl,glut,graphics,Opengl,Glut,Graphics,我正试着移动我的相机。我正在使用gluLookAt函数。我有一些变量 float x,y,z ==> is camera location float lx,ly,lz ==> is point that camera looks. 我试着在x轴上移动 x= x+0.01 gluLookAt(x,y,z, lx,ly,lz, 0.0 1.0, 0.0); 这是工作 当我尝试在z轴上移动时,如上所述 z = z +0.01 gluLookAt(x,y,z, lx,ly,lz, 0.

我正试着移动我的相机。我正在使用gluLookAt函数。我有一些变量

float x,y,z ==> is camera location
float lx,ly,lz ==> is point that camera looks.
我试着在x轴上移动

x= x+0.01
gluLookAt(x,y,z, lx,ly,lz, 0.0 1.0, 0.0);
这是工作

当我尝试在z轴上移动时,如上所述

z = z +0.01
gluLookAt(x,y,z, lx,ly,lz, 0.0 1.0, 0.0);
没有什么变化。同样,当我多次调用此函数时,对象的前半部分会消失(对象的角),下一次调用gluLookAt对象后,对象会完全消失

我希望当摄影机向前移动时对象看起来更大,而当摄影机向后移动时对象看起来更小。但当我在z轴上移动相机时,会发生任何变化

有什么问题?为什么物体会消失?我怎样才能在向前移动相机时使物体变大呢

我知道我可以通过平移或增大对象的大小来解决它。但我想用gluLookAt


谢谢您的回答。

听起来您没有正确设置投影矩阵。使用gluPerspective(gl)并确保zNear和zFar参数适合您的对象。

您的默认投影矩阵可能是正交投影矩阵,这意味着当对象靠近相机时,对象不会变大

如果摄影机穿过该对象(穿过Z轴平面),该对象最终将消失


正如Michael提到的,您应该使用安装透视投影矩阵。

正如Michael提到的,这听起来像是投影矩阵问题。当使用透视变换时,将变换深度,以便在距离摄影机较近的位置提供比距离更高的深度测试精度。作为此变换的一部分,z坐标(在视口坐标中)除以zNear(近平面距离)-zFar(远平面距离)。为了最大限度地减少深度,Z近距离(相机前面物体不可见的距离)必须尽可能大,以便在你靠近物体时,它们最终会穿过平面,物体的前部将被剪裁(这通常看起来像是对象的前面被切断了,你可以看到里面/透过它)。

+cemal在OpenGL上尝试ThinMatrix的教程