Я создаю 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);
Этот подход отлично работает до тех пор, как мои многоугольники не слишком сложны, например, рисование многоугольника, как это не проблема на всех:
Моя проблема в том, что GL_TRIANGLE_FAN всегда начинается с первой точки (а в данном случае), а затем использует 2 другие точки, чтобы нарисовать треугольник, пока вся форма не будет завершена.
Если более сложный многоугольник должен быть нарисован, это может привести к проблемам, как вы можете увидеть здесь: (в этом примере река, которая протекает через город представляет собой сложный многоугольник)
Вопрос теперь в том, как избежать этой проблемы, чтобы даже сложные полигоны были нарисованы правильно и заполнены?
Проблема заключается в рисовании вогнутых многоугольников.
При использовании GL_TRIANGLE_STRIP вместо GL_TRIANGLE_FAN, многоугольники нарисованы правильно, но только их точки соединены вместе треугольниками, сам многоугольник не заполнен.
GL_TRIANGLE_FAN может надежно нарисовать [* выпуклые * полигоны] (http://en.wikipedia.org/wiki/Convex_and_concave_polygons) , – user2864740