Eu acho que podemos resolver isso se pensarmos sobre isso.
Obviamente, você desejaria criar faces (triângulos) onde as duas geometrias se cruzam. Então você tem três malhas: a interseção que você acabou de isolar, geometria 1 e geometria 2.
Em seguida, basta excluir o que você não precisa!
- BooleanDifference: exclua a peça isolada e a geometria 2.
- BooleanIntersection: exclua as geometrias 1 e 2, deixando a parte isolada
- BooleanUnion: mesclar as geometrias 1 e 2 e excluir a peça isolada (certifique-se de unir as geometrias 1 e 2 em uma geometria sólida)
- BooleanSplit: Separe a geometria 1, geometria 2 e duplique a parte isolada (anexe uma à geometria 1 e a outra à geometria 2)
Eu acho que isso cobre, né? A parte mais difícil seria obviamente criar as faces da interseção. Para isso, percorra cada face de uma e verifique se essa face faz parte da outra; se estiver totalmente dentro, copie a face como parte da malha de interseção. Se estiver parcialmente dentro, será necessário dividir o triângulo ao longo da linha de interseção; Eu acho que o DirectX e o OpenGL teriam funções auxiliares para isso, ou é apenas uma matemática de avião 3D (vetores). Aprendi esse tipo de coisa no Cálculo 3 (ou foi 2?), Mas se você não tem idéia, talvez pergunte em math.stackexchange.com . E então, claro, se o rosto estiver do lado de fora, não faça nada. Depois de percorrer todas as faces das duas malhas, você ficará com a malha de interseção.