c# - unity - ¿Cortando un modelo 3D?
learning c# programming with unity 3d pdf (3)
Quiero cortar un modelo 3D relativo a un plano infinito (en WPF). Estoy comprobando si los bordes se cruzan con el plano infinito. Si es verdadero, crearé un nuevo punto en la posición de intersección, por lo que obtendré un par de puntos que quiero generar un tope para que el modelo se cierre después del corte. Por ejemplo, si esta es la sección transversal, el resultado sería el siguiente: Nota: la triangulación no es importante. Solo necesito triángulos.
También necesito detectar los agujeros de la siguiente manera (los agujeros están marcados en rojo):
Si es imposible hacerlo de la manera en que pienso (parece ser así), ¿cómo debería hacerlo? ¿Cómo los desarrolladores bloquean un objeto después de ser cortado?
También hay demasiada confusión. Por ejemplo, el resultado de la primera imagen puede ser: ¿¿Qué me estoy perdiendo??
EDITAR: Después de algunas investigaciones, sabía una cosa que me faltaba:
La entrada ahora es robusta, y necesito la misma salida exacta. ¿Cómo logro eso?
Como el código 11 dijo que ya tienes muy pocos datos para resolver esto, los puntos no son suficientes.
En lugar de recortar bordes para producir nuevos puntos, debe recortar triángulos enteros, lo que le daría nuevos bordes. De esta manera, en lugar de un montón de puntos, tendrías un montón de bordes conectados.
En tu ejemplo con agujeros, con esta única modificación obtendrás 3 polígonos, que es casi lo que necesitas. Entonces necesitarás calcular solo la triangulación correcta.
Busque el término CSG
o Geometría sólida constructiva .
EDITAR:
Si el CSG genérico es demasiado lento para ti y ya tienes los bordes recortados, te sugiero que pruebes con el algoritmo ''Ear Clipping''.
Aquí hay una descripción con soporte para agujeros: https://www.geometrictools.com/Documentation/TriangulationByEarClipping.pdf
También puede probar un enfoque de ''Barrer la línea'': http://sites-final.uclouvain.be/mema/Poly2Tri/
Y una pregunta similar sobre SO, con muchas ideas: triangulación de polígono con agujeros
Espero que ayude.
En el pasado, he hecho este tipo de cosas usando un BSP .
Perdón por ser tan vago, pero no es un problema trivial!
Básicamente, convierte su malla triangular en la representación BSP, agrega su plano de recorte al BSP y luego lo convierte nuevamente en triángulos.
Partiendo de lo que dijo zwcloud, su representación de puntos es ambigua. Simplemente no tienes suficientes puntos para determinar dónde están realmente las concavidades / muescas.
Sin embargo, si puede resolver eso obteniendo puntos adicionales (necesita puntos medios de segmentos, creo), solo necesita tirar los puntos en un algoritmo de envoltura . Entonces, al menos, tendrás un límite.
Los agujeros son un poco más difíciles. Quizás pueda salirse con la suya simplemente mirando los puntos excluidos de la salida del cálculo de la contracción e intentando encontrar formas adicionales en eso, favoreciendo heurísticamente los puntos ubicados cerca del centroide de su polígono recién creado.
Pensamiento adicional: si puede limitarse a polígonos convexos con solo un agujero convexo similar, el problema será mucho más fácil de resolver.