Есть две разные вещи, которые нужно учитывать: Вы просто хотите, чтобы это выглядело правильно, то есть удаление скрытой поверхности?Тогда простое глубинное тестирование сделает работу;накладные расходы заключаются в том, что вы обрабатываете геометрию, которая вообще не отображается на экране.Однако, если это (очень) старая игра, из которой вы взяли данные, очень вероятно, что полная карта со всеми ее активами имеет меньше полигонов, чем то, что видно в современных играх на скриншоте.В этом случае вы не столкнетесь с какими-либо проблемами с производительностью.
Если вы действительно столкнетесь с проблемами с производительностью, вам нужно найти баланс между тем, сколько времени вы хотите потратить, определяя, что (не) виднои на самом деле рендеринг.10 лет назад все еще было важно быть почти идеальным пикселем, чтобы сэкономить как можно больше растеризации.Современные графические процессоры обладают таким запасом энергии, что достаточно просто сделать грубый выбор того, что следует включить в рендеринг.
Однако эти вычисления полностью выходят за рамки OpenGL или любого другого 3D-растеризации API (например, Direct3D)- их задача - рисовать треугольники на экране, используя сложные методы растеризации;нет управления объектами, нет функций более высокого уровня.Так что это зависит от вас, чтобы реализовать это.
Типичный подход заключается в использовании структуры пространственного подразделения.Наиболее популярными являются деревья Kd , октреи и деревья BSP .Деревья BSP пространственно очень эффективны, но тяжелее в вычислениях.Лично я предпочитаю гибрид / комбинацию дерева Kd и октри, так как их легко модифицировать для отслеживания динамических изменений в сцене.Деревья BSP гораздо тяжелее для обновления (обычно требуется полная перерасчет).
При таком пространственном структурировании очень легко определить, находится ли точка в определенной области интереса.Также очень просто выбрать узлы в дереве с помощью геометрических ограничений, таких как плоскости.Это делает реализацию грубого отсечения усеченного контура очень простой: каждый использует плоскости отсечения усеченного конуса, чтобы выбрать все узлы в дереве внутри плоскостей.Чтобы облегчить жизнь графическим процессорам, вы можете отсортировать узлы от дальних до удаленных;опять же, вам помогает древовидная структура, поскольку вы можете рекурсивно сортировать дерево, что приводит к почти оптимальной сложности O (n log (n)).
Если вам все еще нужно улучшить производительность рендеринга, вы можете использоватьпространственные деления, определенные деревом, для (невидимой) визуализации тестовой геометрии в запросе окклюзии , прежде чем вернуться в поддерево, ограниченное тестируемыми границами.