Другие ответы сосредоточены на использовании перенасыщения.Glut не рекомендуется для профессиональной или даже современной разработки, а в OP ничего не говорится об использовании glut - просто OpenGL.Итак, я добавлю:
Небольшой фон
zNear
, расстояние от начала координат до ближайшей плоскости отсечения, является одним из используемых параметровдля построения матрицы проекции:
Матрица проекции
Где
SYMBOL MEANING TYPICAL VALUE
------ -------------- -------------
fov vertical field of view 45 – 90 degrees
aspect Aspect ratio around 1.8 (frame buffer Width / Height)
znear near clip plane +1
zfar far clip plane. 10
SYMBOL MEANING FORMULA
---------- ------------------------------- --------------
halfHeight half of frustum height at znear znear∗tan(fov/2)
halfWidth half of frustum width at znear halfHeight×aspect
depth depth of view frustum zfar−znear
(более красиво отформатированная версия на http://davidlively.com/programming/graphics/opengl-matrices/perspective-projection/)
Когда происходит перспективное деление - между вершинным и фрагментным шейдерами - вершины преобразуются в нормализованные координаты устройства (NDC), в "пространстве клипаMsgstr "" В этом пространстве будет отображено все, что умещается в поле размером 2x2x1 (x, y, z). Любые фрагменты, которые не помещаются в поле с углами (-1, -1, 0) - (+1,+1, +1) быть обрезанным.
Практическое Бытие Апшота
Неважно, какие у вас zNear
и zFar
значения , если они обеспечивают достаточное разрешение и точность, а zFar> zNear.
Ваша система обнаружения и реагирования на столкновения отвечает за сохранениеДайте камере слишком близко приблизиться к геометрии.«Слишком близко» - это функция ваших границ zNear и геометрии.Даже если у вас zNear 1E-9, геометрия будет обрезана, когда она окажется слишком близко к началу пространства клипа.
Итак: исправьте обнаружение столкновений и перестаньте беспокоиться о своем zNear.