我已经在OpenGL中实现了第一人称相机,但是当我靠近一个物体时它开始消失,所以我想设置接近零的近平面,这样我就可以更接近物体了。所以,如果有人能告诉我这是最好的方法。 谢谢。
答案 0 :(得分:2)
所以如果有人能告诉我
答案 1 :(得分:2)
其他回应的重点是使用过剩。 Glut不推荐用于专业甚至是现代的开发,OP也没有提到使用过剩 - 只是OpenGL。所以,我会说:
一点背景
zNear
,从原点到近剪裁平面的距离是用于构建投影矩阵的参数之一:
投影矩阵
其中
SYMBOL MEANING TYPICAL VALUE
------ -------------- -------------
fov vertical field of view 45 – 90 degrees
aspect Aspect ratio around 1.8 (frame buffer Width / Height)
znear near clip plane +1
zfar far clip plane. 10
SYMBOL MEANING FORMULA
---------- ------------------------------- --------------
halfHeight half of frustum height at znear znear∗tan(fov/2)
halfWidth half of frustum width at znear halfHeight×aspect
depth depth of view frustum zfar−znear
(http://davidlively.com/programming/graphics/opengl-matrices/perspective-projection/上的格式更精确的版本)
当透视分割发生时 - 在顶点和片段着色器之间 - 顶点在“剪辑空间”中转换为标准化设备坐标(NDC)。在此空间中,将呈现适合2x2x1(x,y,z)框的任何内容。任何不适合带有角(-1,-1,0) - (+ 1,+ 1,+ 1)的框的片段都会被剪裁。
实际操作
您的zNear
和zFar
值 无关紧要,只要它们提供足够的分辨率&精度和zFar> zNear。
您的碰撞检测&响应系统负责使相机不要太靠近几何体。 “太近”是zNear和几何边界的函数。即使您有1E-9的zNear,当几何体太靠近剪辑空间原点时也会被剪裁。
所以:修复你的碰撞检测并停止担心你的zNear。
答案 2 :(得分:1)
使用glFrustum或glOrtho设置投影矩阵时会设置近平面。其中一个参数是近平面。注意到近平面的距离必须> 0
答案 3 :(得分:1)
您没有太多选择。
永远不要设置太少的近平面。您将使用z-buffer运行精度问题。但是,farPlane可能非常大。像(0.1,1000)这样的值可以很好,具体取决于您的应用程序