绘制模型时,nearClipPlane和farClipPlane会做什么?

时间:2019-01-20 11:50:28

标签: c# monogame

在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空间的最小和最大长度,但在调整值后不确定。

1 个答案:

答案 0 :(得分:1)

“近/远”窗格定义zbuffer的范围(在0-1范围内)

无论如何,几何形状和像素都将在硬件中“渲染”-但是像素将被丢弃,因为它不在zbuffer范围内(我不知道它是否在硬件上像在技术上这样解决)

“距离”过大的另一个问题是Z战。在zbuffer的0-1范围内必须覆盖的距离越长,它们之间的差异就越小(在0-1范围内),因此浮点精度会导致z冲突(在非常近的像素中闪烁,他们会“争取”其z值)