2014-01-08 2 views
5

Я создаю 2D-приложение Openstreetmap для Android, использующее OpenGL ES.Android OpenGL ES - Как нарисовать заполненный вогнутый многоугольник?

К сожалению, я борюсь с рисования вогнутых полигонов, состоящих из приблизительно 50 или более точек. Для того, чтобы выполнить что мои многоугольники заполнены, я использую 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); 

Этот подход отлично работает до тех пор, как мои многоугольники не слишком сложны, например, рисование многоугольника, как это не проблема на всех:

enter image description here

Моя проблема в том, что GL_TRIANGLE_FAN всегда начинается с первой точки (а в данном случае), а затем использует 2 другие точки, чтобы нарисовать треугольник, пока вся форма не будет завершена.

Если более сложный многоугольник должен быть нарисован, это может привести к проблемам, как вы можете увидеть здесь: (в этом примере река, которая протекает через город представляет собой сложный многоугольник) enter image description here

Вопрос теперь в том, как избежать этой проблемы, чтобы даже сложные полигоны были нарисованы правильно и заполнены?

Проблема заключается в рисовании вогнутых многоугольников.

При использовании GL_TRIANGLE_STRIP вместо GL_TRIANGLE_FAN, многоугольники нарисованы правильно, но только их точки соединены вместе треугольниками, сам многоугольник не заполнен.

+0

GL_TRIANGLE_FAN может надежно нарисовать [* выпуклые * полигоны] (http://en.wikipedia.org/wiki/Convex_and_concave_polygons) , – user2864740

ответ

-3

Не большой ответ, но может помочь вам прийти к выводу, взгляните на выпуклом поколения корпуса: - http://docs.opencv.org/doc/tutorials/imgproc/shapedescriptors/hull/hull.html

+2

Не кажется, что сразу связано с рисованием сложных вогнутых полигонов .. – user2864740

+0

Выпуклая оболочка - вогнутый многоугольник, просто подумал, что может отправить вас по правильному пути :) – BenjaminFranklin

+0

Хорошо, это что-то сочетающееся с OpenGL? –

2

Так вы говорите о OpenGL ES, это так же, как вопрос IOS здесь: OpenGL ES - How to Draw a filled Polygon?

В приведенном выше сообщении я перечислил и протестировал 5 сторонних триангуляционных библиотек, но ни один из них не удовлетворяет.

В заключение:

  1. OpenGL ES не триангуляции, таким образом, не поддерживает рисунок, заполненный вогнутый многоугольник (не говоря уже о многоугольник с дырками ...)
  2. придерживаться OpenGL ES рисования, вы должны найти 3-й LIB партии для триангуляции (что не так просто ...)
  3. Используйте graphics.Paint (Android)/CoreGraphics (IOS), чтобы нарисовать заполненный путь, но производительность низка

Я b een ищет легкую и свободную триангуляцию lib в течение довольно длительного времени, но ...

Смежные вопросы