nearClipPlane 和 farClipPlane 在绘制模型时有什么作用?

What does nearClipPlane and farClipPlane do when drawing a model?

在MonoGame中绘制模型时nearClipPlane和farClipPlane有什么作用?

我正在尝试使用朋友在 Blender 中制作的模型进行 3D 绘图。我正在使用从在线教程中提取的一些代码进行绘制,并且效果很好。我只是好奇 nearClipPlane 和 farClipPlane 变量的作用。

private void DrawModel()
{
    foreach (var mesh in Basilisk_MFT.Meshes)
    {
        foreach (BasicEffect basicEffect in mesh.Effects)
        {
            basicEffect.EnableDefaultLighting();
            basicEffect.PreferPerPixelLighting = true;
            basicEffect.World = Matrix.Identity;
            var cameraUpVector = Vector3.UnitZ;
            basicEffect.View = Matrix.CreateLookAt(cameraPosition, cameraLookAtVector, cameraUpVector);
            float aspectRatio = graphics.PreferredBackBufferWidth / (float)graphics.PreferredBackBufferHeight;
            float fieldOfView = MathHelper.PiOver4;
            float nearClipPlane = 1;
            float farClipPlane = 200;
            basicEffect.Projection = Matrix.CreatePerspectiveFieldOfView(fieldOfView, aspectRatio, nearClipPlane, farClipPlane);
        }

        mesh.Draw();
    }
}

我假设它是 3D space 之类的最小和最大长度,但在调整值后我不确定。

near/far 窗格定义了 zbuffer 的范围(在 0-1 范围内)

几何和像素无论如何在硬件中都是 "rendered" - 但像素将被丢弃,因为它在 zbuffer 范围之外(我不知道它是否像在硬件中那样在技术上解决)

另一个"distance"太大的问题是Z-Fighting。 zbuffer 的 0-1 范围必须覆盖的距离越远,它们之间的差异就越小(在 0-1 范围内),因此浮点精度会导致 z-Fighting(非常近的像素闪烁,他们将 "fight" 作为他们的 z 值)