Как установить значения zNear и zFar для gluPerspective () для заданного радиуса ограничивающей сферы? - PullRequest
2 голосов
/ 28 декабря 2011

Как и у многих новичков в OpenGL и графическом программировании, у меня возникли проблемы с установкой значений zNear и zFar для gluPerspective(). Учитывая, что я знаю, насколько велика моя сцена, и учитывая возможные проблемы с буфером глубины, которые у меня могут возникнуть, если я установлю ближнюю плоскость слишком близко. Как правильно установить эти параметры?

В двух словах, если я знаю радиус ограничивающей сферы сцены, как я могу правильно настроить проекцию?

Ответы [ 2 ]

1 голос
/ 29 декабря 2011

Вам не нужно сильно беспокоиться о потере точности буфера глубины, если вы держите объекты на достаточном расстоянии от камеры.

Потерянные биты представляют собой два логарифма основания отношения zFar/zNear. Другими словами, для каждого бита точности буфера глубины, которую вы жертвуете, вы можете либо удвоить zFar, либо вдвое увеличить zNear. Логарифмический рост - это то, за что нужно быть благодарным. Кроме того, если вы удваиваете и zNear и zFar, вы не жертвуете дополнительными битами точности буфера глубины.

zNear=1 и zFar=1024 стоят вам только 9 бит точности буфера глубины. Это очень удобное место.

См. Этот FAQ для деталей :

В то время как описание синей книги хорошо указывает на отношения, это несколько неточно. Как соотношение (zFar / zNear) увеличивается, меньшая точность доступна в глубине буфер и большая точность доступна ближе к передней части глубины буфер. Таким образом, примитивы с большей вероятностью взаимодействуют в Z, если они дальше от зрителя.

Угол поля зрения может составлять около 90-70.

0 голосов
/ 28 декабря 2011

возможно, это просто:

  1. найти центр (по оси Z) ограничивающей сферы
  2. near = centre.z - радиус
  3. far = центр.z + radius

Конечно, чтобы найти этот центр, вам нужно будет перебрать все видимые объекты или использовать некоторую иерархию сцены.

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