【问题标题】:gluPerspective parameters- what do they mean?gluPerspective 参数——它们是什么意思?
【发布时间】:2013-05-10 10:25:11
【问题描述】:
我想知道gluPerspective 参数。
在我看到的所有示例中,fovy 设置为大约 45-60 度
我试图将它设置为不同的值,但对象就消失了
对此有何解释?
aspect 值应该始终是比率?为什么要改变它?
zNear, zFar - 再一次,通常的值在 10 和 500+ 左右,这反映了什么?
【问题讨论】:
-
解释了here,甚至还有aspect参数的例子。这是第一个谷歌命中。您能否更具体地说明您不了解的内容?
标签:
opengl
perspective
perspectivecamera
【解决方案1】:
这4个参数的目的是定义一个视锥体,像这样:
截锥体之外的任何东西都不应该在屏幕上可见(为了实现这一点,参数用于计算 4x4 矩阵,然后将其用于将每个顶点转换为所谓的剪辑空间。在那里,测试是否一个顶点是否在截锥体内是微不足道的)
视野参数基本上是通过相机位置以及屏幕顶部的平面与另一个通过相机位置和屏幕底部的平面之间的角度.这个角度越大,你能看到的世界就越多——但与此同时,你能看到的物体也会变小。
为了观察它的影响,我建议编写一个简单的应用程序,您可以在其中通过按键逐渐增加/减少 fov - 然后渲染一些球体或其他基本对象,看看当你改变它时会发生什么。
纵横比是您视口的纵横比。 (在上图中,视口位于近裁剪平面)能够随意定义它是有意义的,因为您的视口的纵横比可能会有所不同。
zNear 和 zFar 值分别定义了相机位置与近、远裁剪平面之间的距离。任何比 zNear 更近或比 zFar 更远的东西都不可见。两个值都必须 > 0,显然 zFar > zNear。
理想情况下应选择 zFar,以便您要渲染的所有内容都可见,但使其大于必要的大小会浪费深度缓冲区精度并可能导致闪烁效果,称为 z-fighting。同样,将 zNear 设置得太靠近相机可能会导致相同的效果 - 事实上,具有合理的 zNear 值比 zFar 更重要。如果你想知道为什么会发生这种情况,你应该阅读一些深入的解释,比如this one或this one