在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空间的最小和最大长度,但在调整值后不确定。
答案 0 :(得分:1)
“近/远”窗格定义zbuffer的范围(在0-1范围内)
无论如何,几何形状和像素都将在硬件中“渲染”-但是像素将被丢弃,因为它不在zbuffer范围内(我不知道它是否在硬件上像在技术上这样解决)
“距离”过大的另一个问题是Z战。在zbuffer的0-1范围内必须覆盖的距离越长,它们之间的差异就越小(在0-1范围内),因此浮点精度会导致z冲突(在非常近的像素中闪烁,他们会“争取”其z值)