Creo que podemos resolverlo si solo pensamos en ello.
Obviamente, querrás crear caras (triángulos) donde las dos geometrías se crucen. Luego te quedan tres mallas: la intersección que acabas de aislar, la geometría 1 y la geometría 2.
Luego, simplemente borre lo que no necesita.
- BooleanDifference: elimina la parte aislada y la geometría 2.
- Intersección booleana: elimina la geometría 1 y 2, dejando la parte aislada
- BooleanUnion: combina las geometrías 1 y 2 y elimina la parte aislada (asegúrate de unir las geometrías 1 y 2 en una geometría sólida)
- BooleanSplit: separe la geometría 1, la geometría 2 y duplique la parte aislada (adjunte una a la geometría 1 y la otra a la geometría 2)
Creo que eso lo cubre, ¿eh? La parte difícil obviamente sería crear las caras de intersección. Para eso, recorra cada cara de una y verifique si esa cara es parte de la otra; si está totalmente adentro, copie la cara como parte de la malla de intersección. Si está parcialmente adentro, debe dividir el triángulo a lo largo de la línea de intersección; Creo que DirectX y OpenGL tendrían funciones auxiliares para esto, o son solo algunas matemáticas de planos 3D (vectores). Aprendí ese tipo de cosas en Calculus 3 (¿o fue 2?) Pero si no tienes idea, quizás preguntes en math.stackexchange.com . Y luego, por supuesto, si la cara está afuera, no hagas nada. Una vez que itera sobre todas las caras de ambas mallas, quedará con la malla de intersección.