Установка возле самолета в OpenGL - PullRequest
3 голосов
/ 05 августа 2010

Я реализовал камеру от первого лица в OpenGL, но когда я приближаюсь к объекту, он начинает исчезать, поэтому я хочу установить ближнюю плоскость близко к нулю, чтобы я мог приблизиться к объектам.Так что, если кто-нибудь может сказать мне, что является лучшим способом сделать это.Спасибо.

Ответы [ 4 ]

2 голосов
/ 19 октября 2017

Другие ответы сосредоточены на использовании перенасыщения.Glut не рекомендуется для профессиональной или даже современной разработки, а в OP ничего не говорится об использовании glut - просто OpenGL.Итак, я добавлю:

Небольшой фон

zNear, расстояние от начала координат до ближайшей плоскости отсечения, является одним из используемых параметровдля построения матрицы проекции:

Матрица проекции

Projection Matrix

Где

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.

2 голосов
/ 05 августа 2010

Так что, если кто-нибудь может сказать мне

gluPerspective .

1 голос
/ 05 августа 2010

У вас не так много вариантов.

  • Подайте лучи из камеры (например, в 4 углах и в центре), возьмите кратчайший минус эпсилон, зажатый до приличного значения> 0. Подойдет 0,1f.
  • Просто запретите камере находиться здесь! Для этого вы можете связать ее со сферой в вашем физическом движке, проверить, пересекает ли она что-то, и она это делает, переместить ее (как и куда ее перемещать - ваша проблема, поскольку она в значительной степени является игровым процессом. Подумайте о Super Mario Galaxy )

Никогда не устанавливайте слишком маленький ближний план. Вы будете работать с проблемами точности с вашим z-буфером. Дальний самолет может быть довольно большим, хотя. Такие значения, как (0,1, 1000) могут быть в порядке в зависимости от вашего приложения

1 голос
/ 05 августа 2010

Ближняя плоскость устанавливается при настройке матрицы проекции с помощью glFrustum или glOrtho. Одним из параметров является ближняя плоскость. Обратите внимание, что расстояние до ближней плоскости должно быть> 0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...