我试图移动相机。我正在使用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轴上移动相机时会发生任何变化。
有什么问题?为什么反对消失?如何在向前移动相机时实现该对象变大。
我知道我可以通过glTranslate或增加对象的大小来解决它。但我想使用gluLookAt。
谢谢你的回答。
答案 0 :(得分:1)
听起来您还没有正确设置投影矩阵。使用gluPerspective(gl http://www.opengl.org/sdk/docs/man/xhtml/gluPerspective.xml)并确保zNear和zFar参数适合您的对象。
答案 1 :(得分:0)
您的默认投影矩阵可能是一个正交投影矩阵,这意味着当物体靠近相机时物体不会变大。
如果相机通过它(穿过zNear平面),对象最终会消失。
正如Michael所提到的,你应该使用gluPerspective安装透视投影矩阵。
答案 2 :(得分:0)
正如迈克尔所说,这听起来像投影矩阵问题。当使用透视变换时,深度被变换以便提供更接近相机的深度测试精度而不是距离。作为该变换的一部分,z坐标(在视口坐标中)除以zNear(近平面距离)-zFar(远平面距离)。为了最大限度地减少深度对抗,zNear距离(相机前面的物体变得不可见的距离)必须与你可以逃脱的一样大,所以当你移向物体时,它们最终会越过飞机和前面的距离。对象将被剪裁(通常看起来好像对象的前面已被切断,你可以看到内部/通过它)。