OpenGL - не рисовать полностью закрытые полигоны? - PullRequest
4 голосов
/ 02 октября 2011

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

Теперь мой вопрос:

Как эффективный способ предопределения определить, полностью ли перекрыт полигон другими, чтобы мы могли просто пропустить его в процессе рисования для повышения производительности?

Ответы [ 2 ]

5 голосов
/ 02 октября 2011

Техника, которую вы ищете, называется Отбор окклюзии и представляет собой довольно сложную задачу.

Возможность перебирать их в порядке увеличения расстояния до камеры (спереди назад)) дает вам некоторые преимущества.Простое их отображение позволяет вам воспользоваться преимуществами ранних z-тестирований современного графического оборудования, а полигоны должны пройти только обработку вершин и растеризацию, но не должны быть заштрихованы фрагментами.Это также может быть достигнуто без сортировки полигонов, но с их рендерингом (в произвольном порядке) в так называемой глубокой подготовке, где вы отключаете цветную запись и визуализируете только значения глубины полигонов.Теперь на следующем этапе рендеринга (реального) вы также получите прибыль от раннего отклонения z.

Вы также можете использовать аппаратные запросы окклюзии современных графических процессоров, как описано в этой статье о графических процессорах

Но, как сказал Ханнеш, он всегда должен быть взвешенным, если накладные расходы по выбраковке окклюзии того стоят.Я полагаю, что в вашем случае сортировка по порядку не происходит просто из ниоткуда.Возможно, подготовка к глубине - жизнеспособная альтернатива, не требующая сортировки.Принимая во внимание, что вы можете использовать окклюзионные запросы таким образом, чтобы не требовалась какая-либо сортировка (как описано в ссылке), в этом случае она не так эффективна, как при сортировке по типу «вперед-назад».

4 голосов
/ 02 октября 2011

То, о чем вы думаете, называется Отбор окклюзии .Современные видеокарты имеют функции, которые вы можете вызвать и которые точно вам это скажут.Вы должны уже отрендерить окклюзирующую сцену.Альтернатива состоит в том, чтобы сделать это на процессоре.

Однако , я бы не советовал делать то, что вы пытаетесь сделать в любом случае.Видеокарты быстро рендерит статические данные большими кусками.Если вы модифицируете эти данные, чтобы удалить скрытые поверхности, вы снизите производительность независимо от того, насколько быстрым является ваш алгоритм окклюзии.А графические карты - умные, если они поймут, что многоугольник полностью покрыт, они выбросят его из конвейера раньше.буфер .Буферы вершин - отличный способ быстро отрисовать много полигонов.

...