2010-08-04 2 views
3

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

+0

Другое решение этого вопроса. Сделайте свой ограничивающий прямоугольник большим, чем плоскость ближнего обзора. –

ответ

2

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

gluPerspective.

+2

Вопрос в том, как дать хороший первый параметр gluPerspective – Calvin1602

+0

@ Calvin1602: Отрицательный. Первым параметром gluPerspective является FOV. Что не имеет никакого отношения к znear и исчезающим объектам. – SigTerm

+0

Кто знает, что означает параметр zNear? – Luca

2

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

1

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

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

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

+1

Фактически, дело в том, что отношение между ближним и дальним. Он напрямую связан с точностью Z-буфера. – Bahbar

+3

Да, но это означает, что небольшое изменение в zNear принесет вам гораздо большую точность, чем то же изменение в zFar. Итак, как правило, вы вообще хотите увеличить zNear. (0,2/1000 намного лучше 0,1/999,9) – Calvin1602

0

Другие ответы сосредоточены на использовании перенасыщения. Глют не рекомендуется для профессионального или даже современного развития, и OP ничего не говорит об использовании избыточного раствора - просто 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), в " клип ». В этом пространстве будет отображаться все, что помещается в поле 2x2x1 (x, y, z). Любые фрагменты, которые не помещаются в поле с углами (-1, -1, 0) - (+1, +1, +1), будут обрезаны.

Практическая Upshot Being

Это не имеет значения, что ваши zNear и zFar значения, до тех пор, как они предлагают достаточное разрешение & точность и zFar является> zNear.

Ваша система обнаружения столкновений & отвечает за то, что камера не находится слишком близко к геометрии. «Слишком близко» - это функция ваших zNear и границ геометрии. Даже если у вас есть zNear 1E-9, геометрия будет обрезана, когда она станет слишком близкой к месту происхождения клипа.

Итак: устраните обнаружение столкновений и перестаньте беспокоиться о своем zNear.

Смежные вопросы