在OpenGL中设置近平面

时间:2010-08-04 21:44:33

标签: opengl

我已经在OpenGL中实现了第一人称相机,但是当我靠近一个物体时它开始消失,所以我想设置接近零的近平面,这样我就可以更接近物体了。所以,如果有人能告诉我这是最好的方法。 谢谢。

4 个答案:

答案 0 :(得分:2)

  

所以如果有人能告诉我

gluPerspective

答案 1 :(得分:2)

其他回应的重点是使用过剩。 Glut不推荐用于专业甚至是现代的开发,OP也没有提到使用过剩 - 只是OpenGL。所以,我会说:

一点背景

zNear,从原点到近剪裁平面的距离是用于构建投影矩阵的参数之一:

投影矩阵

Projection Matrix

其中

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)的框的片段都会被剪裁。

实际操作

您的zNearzFar 无关紧要,只要它们提供足够的分辨率&精度和zFar> zNear。

您的碰撞检测&响应系统负责使相机不要太靠近几何体。 “太近”是zNear和几何边界的函数。即使您有1E-9的zNear,当几何体太靠近剪辑空间原点时也会被剪裁。

所以:修复你的碰撞检测并停止担心你的zNear。

答案 2 :(得分:1)

使用glFrustum或glOrtho设置投影矩阵时会设置近平面。其中一个参数是近平面。注意到近平面的距离必须> 0

答案 3 :(得分:1)

您没有太多选择。

  • 从相机投射一些光线(例如在4个角落和中心),取最短的负ε,钳制到一个合适的值> 0.1f会做。
  • 首先禁止相机在这里!为此,您可以将它链接到物理引擎中的球体,检查它是否与某些东西相交,它确实是这样,移动它(移动它的方式和位置是你的问题,因为它适用于大部分游戏。想想超级马里奥银河)

永远不要设置太少的近平面。您将使用z-buffer运行精度问题。但是,farPlane可能非常大。像(0.1,1000)这样的值可以很好,具体取决于您的应用程序