Android OpenGL ES – Cómo dibujar un polígono cóncavo lleno?

Estoy creando una aplicación de representación 2D Openstreetmap para Android con OpenGL ES.

Desafortunadamente estoy luchando con dibujar polígonos cóncavos que consisten en aproximadamente 50 o más puntos . Con el fin de lograr que mis polígonos se llenan, estoy usando GL10.GL_TRIANGLE_FAN:

gl.glVertexPointer(2, GL10.GL_FLOAT, 0, vertBuff); // size = 2 because 2D gl.glDrawElements(GL10.GL_TRIANGLE_FAN, pointCount, GL10.GL_UNSIGNED_SHORT, indexBuff); 

Este enfoque funciona bien siempre y cuando mis polígonos no sean demasiado complejos , por ejemplo dibujar un polígono como este no es ningún problema en absoluto:

Introduzca aquí la descripción de la imagen

Mi problema es que GL_TRIANGLE_FAN siempre comienza en el primer punto (a en este caso) y luego usa 2 otros puntos para dibujar un triángulo, hasta que toda la forma esté completa.

Si se tiene que dibujar un polígono más complejo, esto puede llevar a problemas como se puede ver aquí: (en este ejemplo, el río que fluye a través de la ciudad es un polígono complejo ) Introduzca aquí la descripción de la imagen

Mi pregunta ahora es cómo evitar este problema para que incluso complejos polígonos se dibujan correctamente y llena?

El problema radica en dibujar polígonos cóncavos.

Cuando se utiliza GL_TRIANGLE_STRIP en lugar de GL_TRIANGLE_FAN, los polígonos se dibujan correctamente, pero sólo sus puntos están conectados entre sí por triángulos, el polígono en sí no se rellena.

2 Solutions collect form web for “Android OpenGL ES – Cómo dibujar un polígono cóncavo lleno?”

Ya que usted está hablando de OpenGL ES, es lo mismo que el problema de iOS aquí: OpenGL ES – Cómo dibujar un polígono lleno?

En el post anterior, he enumerado y probado 5 bibliotecas de triangulación de terceros, pero ninguna de ellas es satisfactoria.

Para concluir:

  1. OpenGL ES no tiene triangulación, por lo tanto no admite dibujado polígono cóncavo lleno (por no hablar de polígono con agujeros …)
  2. Para Stick a OpenGL ES dibujo, usted tiene que encontrar un tercer partido lib para triangulación (que no es fácil …)
  3. Utilice graphics.Paint (Android) / CoreGraphics (iOS) para dibujar la ruta llena, pero el rendimiento es bajo

He estado buscando una liberación ligera y libre de triangulación durante mucho tiempo, pero …

No es una gran respuesta, pero podría ayudarle a llegar a una conclusión, echar un vistazo a la generación de casco convexo: – http://docs.opencv.org/doc/tutorials/imgproc/shapedescriptors/hull/hull.html

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.