Foros - Stratos

Programadores => Programación gráfica => Mensaje iniciado por: samsaga2 en 01 de Enero de 1970, 01:00:00 AM

Título: Triangulizar poligonos
Publicado por: samsaga2 en 01 de Enero de 1970, 01:00:00 AM
                                Sabeis algún algoritmo que convierta un polígono cóncavo compuesto por vertices en 2d en una lista de triángulos?
                               
Título: Triangulizar poligonos
Publicado por: BeRSeRKeR en 01 de Enero de 1970, 01:00:00 AM
                                Hola...espero que esto te sirva.

Imaginemos que tienes un polígono de 5 vértices y quieres convertirlo a triángulos.

El nº de índices que necesitarías sería

numIndices = (numVertices - 2) * 3
numTriangulos = numIndices / 3

o sea que tendrías que para un polígono de 5 vértices necesitarías o 9 vértices o 9 índices (y 5 vértices) si utilizas primitivas indexadas. Así pues ese polígono se dividiría en 3 triángulos. Para calcular los índices de esos 3 triángulos podrías hacer lo siguiente:

int numIndices = (numVertices - 2) / 3;

WORD *Indices = new WORD[numIndices];

WORD v0, v1, v2;
for(i = 0; i < (numIndices / 3); i++)
{
 if(i == 0)
 {
   v0 = 0;
   v1 = 1;
   v2 = 2;
 }
 else
   v1 = v2;

 v2++;

 Indices[i * 3] = v0;
 Indices[(i * 3) + 1] = v1;
 Indices[(i * 3) + 2] = v2;
}

jeje espero no haberme equivocado...

Saludos
                               
Título: Triangulizar poligonos
Publicado por: BeRSeRKeR en 01 de Enero de 1970, 01:00:00 AM
                                jeje eso lo pides para polígonos cóncavos...no había caído en ello :sonriendo:
                               
Título: Triangulizar poligonos
Publicado por: samsaga2 en 01 de Enero de 1970, 01:00:00 AM
                                Como me gusta el OpenGL! :sonriendo:
Me acabo de enterar mirando en http://graphicsbb.itgo.com/solutions/extrude.html que la libreria glu del opengl lleva funciones de triangulización de poligonos. Incluso soporta agujeros en los poligonos. Me encanta, asi ya no tengo que currarmelo yo, que se lo curre otro, jeje.