Другой подход, который довольно просто реализовать, - это BSP-деревья . Единственная проблема в том, что в 3D он имеет довольно плохие характеристики производительности в худшем случае. Обычно вы поражаете его лишь некоторыми довольно странными случаями, так что, возможно, стоит попробовать и посмотреть, как это работает в вашем случае.
Основная идея состоит в том, что вы строите двоичное дерево, в котором у каждого внутреннего узла есть плоское уравнение, а у каждого листа есть многоугольник. В каждом внутреннем узле все многоугольники в левом дочернем элементе лежат на одной стороне плоскости, а все многоугольники в правом дочернем элементе лежат на другой стороне. Вы должны разделить любые полигоны, которые пересекают плоскость. Вот тут и появляются плохие случаи. Если у вас есть многоугольники, которые расположены так, что плоскость каждого многоугольника разделяет все остальные многоугольники, то это становится ужасно.