Я попробовал наивный подход , который был достаточно быстрым для моего приложения.
Для каждого треугольника в сетке проверьте, не перекрыт ли какой-либо другой треугольник в сетке, таким образом O (n2) . (Я получил результаты с высокой точностью только из-за проверки, была ли закрыта центральная точка каждого треугольника или нет, хотя вам следует хотя бы проверить вершины углов треугольника, если точность важна).
На компьютере с процессором Pentium 4 (c ++) двоичный объект STL из ~ 10000 треугольников занял около 1 минуты, чтобы завершить .
Алгоритм можно оптимизировать до ~ 40 процентов, сначала отсортировав треугольники, например, по размеру области или расстоянию от точки обзора (с большей вероятностью, чтобы перекрыть, поэтому вы можете пропустить больше проверок).
Следующим шагом оптимизации будет размещение треугольников в октрое, что должно значительно сократить количество проверок окклюзии.