Я думаю, що ми можемо це розгадати, якщо просто подумаємо про це.
Ви, очевидно, хотіли б створити грані (трикутники), де дві геометрії перетинаються. Тоді вам залишаються три сітки: перетин, який ви просто виділили, геометрія 1 та геометрія 2.
Потім просто видаліть те, що вам не потрібно!
- BooleanDifference: видаліть ізольовану частину та геометрію 2.
- BooleanIntersection: видаліть геометрію 1 і 2, залишивши ізольовану частину
- BooleanUnion: об’єднайте геометрії 1 і 2 і видаліть ізольовану частину (обов'язково зшийте геометрії 1 і 2 в цільну геометрію)
- BooleanSplit: відокремте геометрію 1, геометрію 2 та копіюйте ізольовану частину (приєднайте одну до геометрії 1, а другу - до геометрії 2)
Я думаю, що це охоплює, так? Важкою частиною, очевидно, буде створення граней перехрестя. Для цього перейдіть через кожне обличчя одного і перевірте, чи є це обличчя частиною іншого; якщо він повністю знаходиться всередині, скопіюйте обличчя як частину сітки перехрестя. Якщо він частково всередині, то потрібно розділити трикутник по лінії перетину; Я думаю, що DirectX і OpenGL обидва мали б допоміжні функції для цього, або це просто якась 3D-математика площини (вектори). Я дізнався про подібні речі в обчисленні 3 (чи це було 2?), Але якщо у вас немає поняття, можливо, запитайте на сайті math.stackexchange.com . І тоді, звичайно, якщо обличчя зовні, нічого не робіть. Після того, як ви перейдете по всіх гранях обох сіток, вам залишиться сітка перетину.