Я думаю, что мы можем разобраться, если мы просто подумаем об этом.
Очевидно, вы захотите создать грани (треугольники), где две геометрии пересекаются. Тогда у вас останется три сетки: только что пересеченное вами пересечение, геометрия 1 и геометрия 2.
Затем просто удалите то, что вам не нужно!
- BooleanDifference: удалить изолированную деталь и геометрию 2.
- BooleanIntersection: удалить геометрию 1 и 2, оставив изолированную часть
- BooleanUnion: объединить геометрии 1 и 2 и удалить изолированную деталь (убедитесь, что геометрии 1 и 2 объединены в твердую геометрию)
- BooleanSplit: отделить геометрию 1, геометрию 2 и продублировать изолированную часть (прикрепить одну к геометрии 1, а другую к геометрии 2)
Я думаю, что это покрывает, а? Трудная часть, очевидно, будет создавать грани пересечения. Для этого, переберите каждую грань одного и проверьте, является ли эта грань частью другой; если он полностью внутри, то скопируйте грань как часть сетки пересечения. Если он частично внутри, то вам нужно разбить треугольник вдоль линии пересечения; Я думаю, что DirectX и OpenGL будут иметь вспомогательные функции для этого, или это просто какая-то трехмерная математика (векторы). Я узнал подобные вещи в Calculus 3 (или это было 2?), Но если у вас нет подсказки, возможно, спросите на math.stackexchange.com . И тогда, конечно, если лицо снаружи, ничего не делать. После перебора всех граней обеих сеток у вас останется сетка пересечения.