stringtranslate.com

Malla triangular

Ejemplo de malla triangular que representa un delfín.
Una malla triangular creada al contornear una superficie implícita.

En gráficos por computadora , una malla triangular es un tipo de malla poligonal . Comprende un conjunto de triángulos (típicamente en tres dimensiones ) que están conectados por sus aristas o vértices comunes .

Muchos paquetes de software y dispositivos de hardware de gráficos pueden funcionar de manera más eficiente en triángulos agrupados en mallas que en un número similar de triángulos presentados individualmente. Normalmente, esto se debe a que los gráficos por computadora realizan operaciones en los vértices de las esquinas de los triángulos. Con triángulos individuales, el sistema tiene que operar en tres vértices por cada triángulo. En una malla grande, podría haber ocho o más triángulos reunidos en un solo vértice; al procesar esos vértices solo una vez, es posible hacer una fracción del trabajo y lograr un efecto idéntico. [ cita necesaria ]

En muchas aplicaciones de infografía es necesario gestionar una malla de triángulos. Los componentes de la malla son vértices, aristas y triángulos. Una aplicación puede requerir conocimiento de las diversas conexiones entre los componentes de la malla. Estas conexiones se pueden gestionar independientemente de las posiciones reales de los vértices. Este documento describe una estructura de datos simple que es conveniente para administrar las conexiones. Esta no es la única estructura de datos posible. Existen muchos otros tipos y admiten diversas consultas sobre mallas. [ cita necesaria ]

Representación

Son posibles varios métodos para almacenar y trabajar con una malla en la memoria de la computadora. Con las API OpenGL y DirectX existen dos formas principales de pasar una malla triangular al hardware de gráficos: tiras triangulares y matrices de índice. [ cita necesaria ]

Tira triangular

Una forma de compartir datos de vértices entre triángulos es la franja de triángulos. Con tiras de triángulos, cada triángulo comparte un borde completo con un vecino y otro con el siguiente. Otra forma es el abanico de triángulos , que es un conjunto de triángulos conectados que comparten un vértice central. Con estos métodos, los vértices se tratan de manera eficiente, lo que resulta en la necesidad de procesar solo N+2 vértices para dibujar N triángulos. [ cita necesaria ]

Las tiras triangulares son eficientes, sin embargo, el inconveniente es que puede no ser obvio o conveniente traducir una malla triangular arbitraria en tiras. [ cita necesaria ]

La estructura de datos

La estructura de datos que representa la malla brinda soporte para dos operaciones básicas: insertar triángulos y eliminar triángulos. También admite una operación de colapso de bordes que es útil en esquemas de diezmado de triángulos. La estructura no proporciona soporte para las posiciones de los vértices, pero sí supone que a cada vértice se le asigna un identificador entero único, normalmente el índice de ese vértice en una matriz de posiciones de vértices contiguas. Un vértice de malla está definido por un único número entero y se denota por hvi. Un borde de malla está definido por un par de números enteros hv0,v1i, correspondiendo cada número entero a un punto final del borde. Para admitir mapas de bordes, los bordes se almacenan de modo que v0 = min(v0,v1). Un componente de triángulo está definido por un triple de números enteros hv0,v1,v2i, cada número entero correspondiente a un vértice del triángulo. Para admitir mapas de triángulos, los triángulos se almacenan de modo que v0 = min(v0,v1,v2). Observe que hv0,v1,v2i y hv0,v2,v1i se tratan como triángulos diferentes. Una aplicación que requiere triángulos de dos lados debe insertar ambos tripletes en la estructura de datos. Para evitar recordatorios constantes sobre el orden de los índices, en el resto del documento la información del par/triple no implica que los vértices estén ordenados de ninguna manera (aunque la implementación sí maneja el orden). [ cita necesaria ]

La conectividad entre los componentes está completamente determinada por el conjunto de tripletas que representan los triángulos. Un triángulo t = hv0,v1,v2i tiene vértices v0, v1 y v2. Tiene aristas e0 = hv0,v1i, e1 = hv1,v2i y e2 = hv2,v0i. También se conocen las conexiones inversas. El vértice v0 es adyacente a las aristas e0 y e2 y al triángulo t. El vértice v1 es adyacente a las aristas e0 y e1 y al triángulo t. El vértice v2 es adyacente a los bordes e1 y e2 y al triángulo t. Los tres bordes e0, e1 y e2 son adyacentes a t. [ cita necesaria ]

La cantidad de esta información que almacena una estructura de datos depende de las necesidades de una aplicación. Además, es posible que la aplicación desee tener información adicional almacenada en los componentes. La información almacenada en un vértice, arista o triángulo se denomina atributo de vértice, atributo de arista o atributo de triángulo. Las representaciones abstractas de estos para la estructura de datos simple que se describe aquí son [ cita necesaria ]

Vértice = <entero>; //vBorde = <entero, entero>; // v0, v1Triángulo <entero,entero,entero>; // v0, v1, v2VData = <datos de vértice específicos de la aplicación>;EData = <datos de borde específicos de la aplicación>;TData = <datos triangulares específicos de la aplicación>;VAttribute = <VData, establecer<Borde>, establecer<Triángulo>>; // datos, eset, tsetEAttribute = <EData, establecer<Triángulo>>; // datos, tsetTAtributo = <TDatos>; // datosVPair = par<Vértice,VAttribute>;EPair = par<Edge,EAttribute>;TPair = par<Triángulo,TAtributo>;VMap = mapa<VPair>;EMap = mapa<EPair>;TMap = mapa<TPair>;Malla = <VMap,EMap,TMap>; // vmap, emap, tmap

Los mapas admiten las funciones estándar de inserción y eliminación de una tabla hash. La inserción se produce sólo si el elemento aún no existe. La eliminación se produce sólo si el artículo existe. [ cita necesaria ]

colapso del borde

Esta operación implica identificar un borde hvk, vti donde vk se denomina vértice de mantenimiento y vt se denomina vértice de lanzamiento. Los triángulos que comparten este borde se eliminan de la malla. El vértice vt también se elimina de la malla. Cualquier triángulo que compartiera vt tiene ese vértice reemplazado por vk. Figura 1 [ ¿dónde? ] muestra una malla triangular y una secuencia de tres colapsos de bordes aplicados a la malla. [ cita necesaria ]

matriz de índice

Con las matrices de índice, una malla está representada por dos matrices separadas, una matriz que contiene los vértices y otra que contiene conjuntos de tres índices en esa matriz que definen un triángulo. El sistema de gráficos procesa los vértices primero y luego representa los triángulos, utilizando los conjuntos de índices trabajando en los datos transformados. En OpenGL, esto es compatible con la primitiva glDrawElements() cuando se utiliza Vertex Buffer Object (VBO). [ cita necesaria ]

Con este método, cualquier conjunto arbitrario de triángulos que comparta cualquier número arbitrario de vértices se puede almacenar, manipular y pasar a la API de gráficos, sin ningún procesamiento intermediario. [ cita necesaria ]

Ver también