# Modelado poligonal

En los gráficos 3D por computadora, el modelado poligonal es un enfoque para modelar objetos representando o aproximando sus superficies usando mallas poligonales. El modelado poligonal se adapta bien a la representación de línea de exploración y, por lo tanto, es el método de elección para los gráficos por computadora en tiempo real. Los métodos alternativos para representar objetos 3D incluyen superficies NURBS, superficies de subdivisión y representaciones basadas en ecuaciones utilizadas en trazadores de rayos.

## Teoría geométrica y polígonos

El objeto básico utilizado en el modelado de mallas es un vértice, un punto en el espacio tridimensional. Dos vértices conectados por una línea recta se convierten en una arista. Tres vértices, conectados entre sí por tres aristas, definen un triángulo, que es el polígono más simple del espacio euclidiano. Se pueden crear polígonos más complejos a partir de varios triángulos o como un solo objeto con más de 3 vértices. Los polígonos de cuatro lados (generalmente denominados quads) y los triángulos son las formas más comunes utilizadas en el modelado poligonal. Un grupo de polígonos, conectados entre sí por vértices compartidos, generalmente se denomina elemento. Cada uno de los polígonos que forman un elemento se llama cara.
En geometría euclidiana, tres puntos no colineales cualesquiera determinan un plano. Por esta razón, los triángulos siempre habitan en un solo plano. Sin embargo, esto no es necesariamente cierto para polígonos más complejos. La naturaleza plana de los triángulos simplifica la determinación de su superficie normal, un vector tridimensional perpendicular a la superficie del triángulo. Las superficies normales son útiles para determinar el transporte de luz en el trazado de rayos y son un componente clave del popular modelo de sombreado de Phong. Algunos sistemas de renderizado usan normales de vértice en lugar de normales de cara para crear un sistema de iluminación más atractivo a costa de más procesamiento. Debe tenerse en cuenta que cada triángulo tiene dos caras normales, que apuntan en direcciones opuestas entre sí. En muchos sistemas, solo una de estas normales se considera válida: el otro lado del polígono se denomina cara posterior y puede hacerse visible o invisible según los deseos del programador a cargo.
Muchos programas de modelado no aplican estrictamente la teoría geométrica; por ejemplo, es posible que dos vértices tengan dos bordes distintos que los conectan, ocupando exactamente la misma ubicación espacial. También es posible que existan dos vértices en las mismas coordenadas espaciales, o que existan dos caras en la misma ubicación. Por lo general, no se desean situaciones como estas y muchos paquetes admiten una función de limpieza automática. Sin embargo, si la limpieza automática no está presente, deben ser eliminados manualmente.
Un grupo de polígonos que están conectados por vértices compartidos se denomina malla. Para que una malla se vea atractiva cuando se renderiza, es deseable que no se interseque consigo misma, lo que significa que ningún borde pase a través de un polígono. Otra forma de ver esto es que la malla no puede perforarse a sí misma. También es deseable que la malla no contenga ningún error, como vértices, aristas o caras duplicadas. Para algunos propósitos, es importante que la malla sea una variedad, es decir, que no contenga agujeros o singularidades (ubicaciones donde dos secciones distintas de la malla están conectadas por un solo vértice).

## Construcción de mallas poligonales

Aunque es posible construir una malla especificando manualmente los vértices y las caras, es mucho más común construir mallas usando una variedad de herramientas. Hay disponible una amplia variedad de paquetes de software de gráficos 3D para usar en la construcción de mallas poligonales.
Uno de los métodos más populares para construir mallas es el modelado de cajas, que utiliza dos herramientas simples:
* La herramienta de subdivisión divide las caras y los bordes en partes más pequeñas agregando nuevos vértices. Por ejemplo, un cuadrado se subdividiría agregando un vértice en el centro y uno en cada borde, creando cuatro cuadrados más pequeños.
* La herramienta de extrusión se aplica a una cara o grupo de caras. Crea una nueva cara del mismo tamaño y forma que se conecta a cada uno de los bordes existentes por una cara. Por lo tanto, realizar la operación de extrusión en una cara cuadrada crearía un cubo conectado a la superficie en la ubicación de la cara.
Un segundo método de modelado común a veces se denomina modelado de inflación o modelado de extrusión. En este método, el usuario crea una forma 2D que traza el contorno de un objeto a partir de una fotografía o un dibujo. Luego, el usuario usa una segunda imagen del sujeto desde un ángulo diferente y extruye la forma 2D en 3D, nuevamente siguiendo el contorno de la forma. Este método es especialmente común para crear caras y cabezas. En general, el artista modelará la mitad de la cabeza y luego duplicará los vértices, invertirá su ubicación en relación con algún plano y conectará las dos piezas. Esto asegurará que el modelo sea simétrico.
Otro método común para crear una malla poligonal es conectar varias primitivas, que son mallas poligonales predefinidas creadas por el entorno de modelado. Las primitivas comunes incluyen:
* Cubos.
* Pirámides.
* Cilindros.
* Primitivos 2D, como cuadrados, triángulos y discos.
* Primitivos especializados o esotéricos, como la tetera de Utah o Suzanne, la mascota del mono de Blender.
* Esferas: las esferas se representan comúnmente en una de dos formas:
** Las icosferas son icosaedros que poseen un número suficiente de triángulos para parecerse a una esfera.
** Las esferas UV están compuestas de cuadrantes y se asemejan a la cuadrícula que se ve en algunos globos: los cuadrantes son más grandes cerca del "ecuador" de la esfera y más pequeños cerca de los "polos", y finalmente terminan en un solo vértice.
Finalmente, existen algunos métodos especializados para construir mallas de alto o bajo detalle. El modelado basado en bocetos es una interfaz fácil de usar para construir rápidamente modelos de bajo detalle, mientras que los escáneres 3D se pueden usar para crear mallas de alto detalle basadas en objetos existentes del mundo real de forma casi automática. Estos dispositivos son muy costosos y, por lo general, solo los utilizan investigadores y profesionales de la industria, pero pueden generar representaciones digitales submilimétricas de alta precisión.

## Operaciones

Hay un gran número de operaciones que se pueden realizar sobre mallas poligonales. Algunos de estos corresponden aproximadamente a manipulaciones del mundo real de objetos 3D, mientras que otros no. Las operaciones de malla poligonal incluyen:
* Creaciones: Crear nueva geometría a partir de algún otro objeto matemático
** Loft: Generar una malla creando una forma a lo largo de dos o más curvas de perfil
** Extrusión: Crear una superficie mediante el barrido de una curva de perfil o una superficie poligonal a lo largo de una línea recta o lineal.
** Girar: Generar una malla girando una forma alrededor de un eje.
** Cubos en marcha - Algoritmo para construir una malla a partir de una función implícita.
* Creaciones binarias: Crear una nueva malla a partir de una operación binaria de otras dos mallas.
** Agregar: Suma booleana de dos o más mallas.
** Restar: Resta booleana de dos o más mallas.
** Intersect - Intersección booleana.
** Unión - Unión booleana de dos o más mallas.
** Adjuntar - Adjuntar una malla a otra (eliminando las superficies interiores).
** Chaflán: Crear una superficie biselada que conecta suavemente dos superficies.
* Deformaciones: Mover solo los vértices de una malla.
** Deformar: Mover vértices sistemáticamente (según ciertas funciones o reglas).
** Deformación ponderada: Mover los vértices en función de los pesos localizados por vértice.
** Morph: Mover los vértices suavemente entre una fuente y una malla de destino.
** Doblar: Mover los vértices para "doblar" el objeto.
** Twist - Mueve los vértices para "torcer" el objeto
* Manipulaciones: Modificar la geometría de la malla, pero no necesariamente la topología.
** Desplazar: Introducir geometría adicional basada en un "mapa de desplazamiento" desde la superficie.
** Simplificar: Eliminar y promediar vértices sistemáticamente.
** Subdividir: Introducir nuevos vértices en una malla subdividiendo cada cara. En el caso de, por ejemplo, Catmull-Clark, la subdivisión también puede tener un efecto de suavizado en las mallas a las que se aplica.
** Casco convexo: Generar una malla convexa que encierra mínimamente una malla determinada.
** Cortar: Crear un agujero en una superficie de malla.
** Puntada: Cerrar un agujero en una superficie de malla.
* Medidas - Calcular algún valor de la malla
** Volumen - Calcular el volumen 3D de una malla (integral volumétrica discreta).
** Área de superficie - Calcular el área de superficie de una malla (integral de superficie discreta)
** Detección de colisión: Determinar si dos mallas complejas en movimiento han colisionado.
** Ajuste: Construir una superficie paramétrica (NURBS, spline bicúbica) ajustándola a una malla dada.
** Distancia punto-superficie: Calcular la distancia desde un punto hasta la malla.
** Distancia línea-superficie: Calcular la distancia desde una línea hasta la malla.
** Intersección línea-superficie - Calcular la intersección de la línea y la malla.
** Sección transversal: Calcular las curvas creadas por una sección transversal de un plano a través de una malla.
** Centroide: Calcular el centroide, el centro geométrico, de la malla.
** Centro de masa: Calcular el centro de masa, punto de equilibrio, de la malla.
** Circuncentro - Calcular el centro de un círculo o esfera que encierra un elemento de la malla.
** Incentro - Calcular el centro de un círculo o esfera encerrado por un elemento de la malla.

## Extensiones

Una vez que se ha construido una malla poligonal, se deben tomar más pasos antes de que sea útil para juegos, animación, etc. Se debe mapear la textura del modelo para agregar colores y textura a la superficie y se le debe dar un esqueleto para la animación. A las mallas también se les pueden asignar pesos y centros de gravedad para su uso en simulación física.
Para mostrar un modelo en una pantalla de computadora fuera del entorno de modelado, es necesario almacenar ese modelo en uno de los formatos de archivo que se enumeran a continuación y luego usar o escribir un programa capaz de cargar desde ese formato. Los dos métodos principales para mostrar modelos de polígonos en 3D son OpenGL y Direct3D. Ambos métodos se pueden utilizar con o sin una tarjeta gráfica acelerada en 3D.

## Ventajas y desventajas

Hay muchas desventajas en representar un objeto usando polígonos. Los polígonos no pueden representar con precisión superficies curvas, por lo que se debe usar una gran cantidad de ellos para aproximar curvas de una manera que resulte visualmente atractiva. El uso de modelos complejos tiene un costo en la reducción de la velocidad. En la conversión de línea de exploración, cada polígono debe convertirse y mostrarse, independientemente de su tamaño, y con frecuencia hay una gran cantidad de modelos en la pantalla en un momento dado. A menudo, los programadores deben utilizar varios modelos con diferentes niveles de detalle para representar el mismo objeto con el fin de reducir la cantidad de polígonos que se representan.
La principal ventaja de los polígonos es que son más rápidos que otras representaciones. Mientras que una tarjeta gráfica moderna puede mostrar una escena muy detallada a una velocidad de fotogramas de 60 fotogramas por segundo o superior, los modeladores de superficie, la forma principal de mostrar modelos no poligonales, son incapaces de lograr una velocidad de fotogramas interactiva (10 fotogramas por segundo o más) con una cantidad similar de detalles. Con sprites, otra alternativa a los polígonos, cada pose requerida debe crearse individualmente, mientras que un solo modelo poligonal puede realizar cualquier movimiento si se aplican los datos de movimiento adecuados y se puede ver desde cualquier ángulo.

## Formatos de archivo

* .3ds, .max, que está asociado con 3D Studio Max.
* .blend, que está asociado con Blender.
* .c4d asociado con Cinema 4D.
* .dae (COLLADA).
* .dxf, .dwg, .dwf, asociado con AutoCAD.
* .fbx (Autodesk anterior. Kaydara Filmbox).
* .jt desarrollado originalmente por Siemens Digital Industries Software; ahora un estándar ISO.
* .lwo, que está asociado con Lightwave.
* .lxo, que está asociado con MODO.
* .mb y .ma, que están asociados con Maya.
* .md2, .md3, asociado con la serie de videojuegos Quake.
* .mdl utilizado con el motor Source de Valve.
* .nif (NetImmerse / gamebryo).
* .obj ("El visualizador avanzado" de Wavefront).
* .ply utilizado para almacenar datos de escáneres 3D.
* .rwx (RenderWare).
* .stl utilizado en la creación rápida de prototipos.
* .u3d (3D universal).
* .wrl (VRML 2.0).