OpenGL zNear zFar 是什么意思?

OpenGL what does zNear zFar mean?

我了解到zNear、zFar 标记了场景的裁剪范围。但是 OpenTK restricts 的值要大于零。这是否意味着我的所有对象都应该绘制在正 Z 轴上,这样它就不会被剪裁?

不,这只是查看翻译后的渲染剪辑。因此,如果您渲染一个基于 {0,0,-100} 的对象,而您的相机位于 {0,0,-110},如果在裁剪平面内,它仍然会渲染,但是 -110+zFar-110-zNear 将进一步渲染被剪掉。这是一个非常简单的解释,但实际上它是如何工作的。

不要混淆坐标可以表示或转换成的不同 space。带复选标记的答案过于简单化,以至于在许多情况下甚至可能不是正确答案。

zNear 和 zFar 是距离 "camera" 或以世界单位表示的视图的眼睛的距离,而不是世界坐标。因此它们必须是正数。它们也是 某种 的负面 眼睛 相机 space。只有当相机与指向 -z space 的 z 轴对齐时,复选标记的答案才是正确的,或者你关于被剪裁的内容的陈述。

它们确实有助于定义最近和最远的裁剪范围,但不会标记场景的裁剪范围。同样,这取决于您相机的位置。还有你对 "a scene".

的定义

人们常说OpenGL没有相机。但我不想那样想。有一个视图,因此有一个相机。使用 lookAt 函数,您可以将 view/camera 放置在场景中的任何位置,并将其指向您想要的任何方向。对我来说,您的 scene 是您正在渲染的所有对象,而不仅仅是这些对象的当前视图。并以这种方式考虑,您的 zNear 和 zFar 根本不会限制您的场景,它们只会限制您相机的观看深度。它更像是从你的眼睛伸出的卷尺。它的矢量随着您对事物的看法的改变而改变。

例如,想象一个沿 x 轴和 z 轴按行和列排列的方块网格场景,但 y 均为 0。如果您的相机与 z 轴对齐,则 zNear 和 zFar 与世界相关z 轴。您可能会看到成排的方块远离相机。但是,如果相机在 +100 的 y 处漂浮在所有物体上方并指向下方,您会更多地将其视为网格。在这种情况下,zNear 和 zFar 与场景中的 z 轴无关。它们只与相机在相机的 z 轴上对对象的裁剪有关 - 在相机 space 中。