Что делают nearClipPlane и farClipPlane при рисовании модели? - PullRequest
0 голосов
/ 20 января 2019

Что делают nearClipPlane и farClipPlane при рисовании модели в MonoGame?

Я пробую 3D-рисование с использованием моделей, сделанных другом в Blender. Я использую некоторый код, который я извлек из онлайн-учебника, и он отлично работает. Мне просто любопытно, что делают переменные 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();
    }
}

Я предполагал, что это минимальная и максимальная длина для трехмерного пространства или чего-то еще, но я не был уверен после корректировки значений.

1 Ответ

0 голосов
/ 28 января 2019

Панель ближнего / дальнего обзора определяет диапазон zbuffer (который находится в диапазоне 0-1)

Геометрия и пиксели в любом случае будут "визуализированы" на аппаратном уровне - но пиксель будет отброшен, потому что он находится вне диапазона zbuffer (я не знаю, технически ли он решен подобным образом на аппаратном уровне)

Другая проблема со слишком большим «расстоянием» - это Z-Fighting. Чем больше расстояние должно быть пройдено в диапазоне 0-1 zbuffer, тем меньше разница между ними (в диапазоне 0-1), и поэтому точность с плавающей запятой может привести к z-Fighting (мерцанию в очень близких пикселях, они будут "сражаться" за их z-значение)

...