51

我想知道gluPerspective参数。

在我看到的所有示例中,我fovy都设置为 45-60 度左右,我尝试将其设置为不同的值,但对象只是消失了,对此有何解释?

aspect值应该始终是比率?为什么要改变它?

zNear, zFar- 再一次,通常的值是 10 和 500+ 它反映了什么?

4

1 回答 1

92

4 个参数的目的是定义一个视锥体,如下所示:

透视平截头体

截锥体之外的任何东西都不应该在屏幕上可见(为了实现这一点,参数用于计算 4x4 矩阵,然后用于将每个顶点转换为所谓的剪辑空间。在那里,测试一个顶点是否是否在截锥体内是微不足道的)

视野参数基本上是通过相机位置以及屏幕顶部的平面与通过相机位置和屏幕底部的另一个平面之间的角度。这个角度越大,你能看到的世界就越多——但与此同时,你能看到的物体也会变小。

为了观察它的影响,我建议编写一个简单的应用程序,您可以在其中通过按键逐渐增加/减少 fov - 然后渲染一些球体或其他基本对象并查看更改它时会发生什么。

纵横比是您的视口的纵横比。(在上图中,视口位于近剪裁平面)能够随意定义它是有意义的,因为您的视口的纵横比可能会有所不同。

zNear 和 zFar值分别定义了相机位置与近、远裁剪平面之间的距离。任何比 zNear 更近或比 zFar 更远的东西都不可见。两个值都必须 > 0,显然 zFar > zNear。理想情况下应选择 zFar,以便您要渲染的所有内容都可见,但使其大于必要的值会浪费深度缓冲区精度并可能导致闪烁效果,称为 z-fighting。同样,将 zNear 设置得太靠近相机可能会导致相同的效果 - 实际上,具有合理的 zNear 值比 zFar 更重要。如果你想知道为什么会发生这种情况,你应该阅读一些深入的解释,比如这个这个

于 2013-05-15T20:10:32.810 回答