¿Cómo funciona el algoritmo de cubos de marcha?

Comienzas con un campo escalar 3D. Esto podría ser cualquier cosa, datos de resonancia magnética, fuentes de calor blobby, una función matemática, lo que sea. Solo algún tipo de función que toma una posición 3D como entrada y genera un solo valor escalar.

La superficie se define para todos los puntos donde el campo escalar es igual a un cierto valor. Depende de usted cómo lo define, pero me gusta tener valores positivos como ‘dentro’, y valores negativos como fuera. Donde el campo es igual al umbral, esa es la superficie real.

Luego divide el espacio en una cuadrícula de cubitos y muestra el campo en las esquinas de cada cubo (reutilizando obviamente los valores calculados previamente).

Cada esquina puede estar dentro o fuera (en la superficie debe elegir, dependiendo de la implementación). Entonces ese es el valor booleano. Para 8 puntos de esquina, tienes 2 ^ 8 = 256 situaciones posibles.

Si todas las esquinas están afuera, entonces el espacio está vacío y no hay nada que hacer. Si todos los puntos están dentro, nuevamente, nada que hacer, el cubo está dentro de la carcasa hueca. Sin embargo, si algunos están adentro y otros afuera, entonces debes crear algo de geometría.

Entonces, determina qué situación es y utiliza una tabla de búsqueda para ver el número y la conectividad de los triángulos que debe crear dentro del cubo.

Armado con esta información, debe determinar los puntos donde los 12 bordes del cubo se cruzan con la superficie (esto generalmente se hace interpolando linealmente entre el valor escalar en los puntos finales del borde).

Luego, solo une los puntos de intersección en triángulos dependiendo de los datos de conectividad para la situación en la que se encuentra el cubo.

Al final, habrás discretizado el espacio en montones de triángulos.

Ahora, hay algunas mejoras para hacer. Primero, algunas situaciones son ambiguas, por lo que es posible que necesite muestrear el campo en el centro del cubo para desambiguar algunas situaciones. Además, los cubos de marcha estándar a menudo crean triángulos pequeños o astillas muy delgadas. Hay métodos para evitar esto.

Pero eso es básicamente todo. Esta página es un muy buen lugar para comenzar, con una explicación clara, imágenes y código fuente.