如何为边界球体的给定半径设置gluPerspective()的zNear和zFar值?

时间:2011-12-28 03:56:30

标签: opengl

对于OpenGL和图形编程的许多新手,我在设置zNear的{​​{1}}和zFar值方面遇到了一些问题。鉴于我知道我的场景有多大,并考虑到我可能有的深度缓冲问题,如果我将近平面设置得太近。如何正确设置这些参数?

简而言之,如果我知道场景边界的半径,我怎样才能以正确的方式设置投影?

2 个答案:

答案 0 :(得分:1)

只要您将物体与相机保持合理距离,就不必担心会失去深度缓冲精度。

丢失的比特是比率zFar/zNear的基数2对数。换句话说,对于您牺牲的每个深度缓冲区精度位,您可以加倍zFar或加倍zNear。对数增长值得感恩。另外,如果你将两个 zNearzFar加倍,则不会牺牲额外的深度缓冲区精度。

zNear=1zFar=1024仅花费9位深度缓冲区精度。那是一个非常舒适的空间。

See this FAQ for details

  

虽然蓝皮书的描述很擅长指出   关系,这有点不准确。比例(zFar / zNear)   增加,深度背后的精度较低   缓冲区和更高的精度可以在靠近深度的前方   缓冲。因此,原语更有可能在Z中进行交互   更远离观众。

视场角可以在90-70附近。

答案 1 :(得分:0)

也许很简单:

  1. 找到边界球的中心(在Z轴上)
  2. near = centre.z - radius
  3. far = centre.z + radius
  4. 当然,要找到该中心,您必须遍历整个可见对象或使用某些场景层次结构。