Не знаете, как насчет Frustum Culling

Я новичок в OpenGL. Я использую его с JOGL.

Я читаю о выбраковке усеченного конуса:

http://www.lighthouse3d.com/opengl/viewfrustum/

http://www.crownandcutlass.com/features/technicaldetails/frustum.html

Я не совсем уверен, что он должен делать. Разве OpenGL не отбрасывает объекты за пределами экрана автоматически? (Это отсечение значительно медленнее, чем просто отказ от отправки объектов в первую очередь?)

Из того, что я читаю, не похоже, что это поможет избежать рисования объектов, которые скрыты за другим, но находятся в пределах видимости. Означает ли это, что единственное преимущество - избежать отправки объектов вне экрана в OpenGL?


person Nick Heiner    schedule 27.09.2010    source источник
comment
Вторая ссылка спасет меня, спасибо! :-)   -  person Wojciech Kulik    schedule 03.01.2014


Ответы (4)


Да, в принципе, вы правы. Отбор Frustum отсекает объекты, находящиеся за пределами пирамиды камеры. OpenGL при рендеринге сцены, конечно, тоже делает это, но для каждой вершины. Отбор Frustum работает для каждого объекта, поэтому его потенциал повышения производительности намного выше.
Одним из узких мест является передача данных между ЦП и ГП. Если вам нужно передать, например, только 1/4 всех объектов / вершин в уличной сцене, отсечение усеченного конуса может дать хороший прирост производительности.

person Karel Petranek    schedule 27.09.2010

Самый быстрый объект - это тот, который вам совсем не нужно рисовать.

В общем, для объектов, которые и так не до конца просты, вы предоставите упрощенный, консервативный ограничивающий объем. Таким образом, вы можете выполнять отсечение усеченного конуса, не работая с каждым треугольником в сложном объекте.

Избегание рисования объектов, которые скрыты друг за другом, называется отбраковкой окклюзии. Удаление окклюзии обычно более сложное, чем удаление усеченной кости; однако обратите внимание, что он по-прежнему может использовать тот же упрощенный ограничивающий объем.

person comingstorm    schedule 27.09.2010

Да - отсечение усеченной вершины просто удаляет объекты, которые полностью лежат за пределами усеченной пирамиды. Ни больше ни меньше. Да, вы можете потенциально улучшить производительность по сравнению с самим OpenGL, особенно если вы можете отбраковывать большее количество элементов за один раз (например, библиотека графа просмотра может довольно быстро отсекать целые ветви графа).

Существует также отбраковка лиц, при которой удаляются треугольники (или что-то еще), обращенные в сторону от зрителя, но это отдельно от отсечения усеченной пирамиды.

Есть несколько способов работы с объектами, которые закрыты другими объектами. Отсечение окклюзии является самым простым, но OpenGL ничего не делает для его поддержки напрямую (хотя некоторые аппаратные средства делают это как расширение). Другой - буфер глубины, который OpenGL поддерживает напрямую. Разница в том, что отбраковка окклюзии смотрит на весь объект и не отображает его вообще, если он полностью скрыт. Буфер глубины работает по принципу фрагмент за фрагментом, поэтому он выполняется только после (почти) полного рендеринга объекта. Следовательно, в зависимости от того, с каким количеством объектов вы имеете дело (и т.

person Jerry Coffin    schedule 27.09.2010

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

person Torlack    schedule 27.09.2010