exi*_*all 10 opengl 3d graphics render projection
我一直在学习OpenGL,而另一个让我感到困惑的话题就是远剪裁平面.虽然我可以理解近剪裁平面背后的原因,以及侧面剪裁平面(由于它们外面的物体永远不会被渲染,但它们从未产生任何实际效果),远剪裁平面似乎只是一个烦恼.
因为OpenGL背后的人显然已经想到这一点,所以我知道必须有一些我缺少的东西.为什么OpenGL有一个远剪裁平面?更重要的是,因为你无法将其关闭,在远距离绘制物体时使用的推荐成语和做法是什么(对于诸如太空游戏,天空盒等数千个单位之外的星星等物体)?您是否希望将剪裁平面放得很远,还是有更优雅的解决方案?这是如何在生产软件中完成的?
为什么OpenGL有一个远剪裁平面?
因为计算机是有限的.
通常有两种方法可以尝试解决这个问题.一种方法是通过将极限设为z-far接近无穷大来构建投影.这将收敛于有限值,但它可以对远距离物体的深度精度造成严重破坏.
另一种选择(如果你愿意让超过一定距离的物体完全无法正确深度测试)就是打开深度钳位glEnable(GL_DEPTH_CLAMP).这样可以防止近距离和远距离平面的削波; 只是在[-1,1]范围之外将标准化z坐标的任何片段都会被限制在该范围内.如前所述,它会在被夹住的碎片之间拧紧深度测试,但通常这些物体很远.