OpenGL ES-как нарисовать заполненный многоугольник?

Я пробовал гуглить и искать в стеке, но ничего не нашел: - (
( отображение неправильных форм или других полигонов (мультфильмов, спрайтов) в треугольники в OpenGL ES )

Я хочу нарисовать закрашенный многоугольник в OpenGL ES на iPad (2D, не нужно 3D) (Я новичок в OpenGL & & OpenGL ES) Это кажется простым на OpenGL, но с ES можно просто нарисовать треугольник.

но я не могу найти хорошего учебника об этом :-( Существует ли какая-либо обертка библиотека или что-нибудь еще, что может мне помочь ?

Я не хочу использовать CoreGraphics, это слишком медленно для того, что я делаю ^^
И если возможно, избегая слишком (большой) библиотеки, такой как Cocos2D.

редактировать: работа над проблемой, вот некоторые полезные ссылки (будет редактировать)
ссылки
- Полигон Triangulation
http://www.vterrain.org/Implementation/Libs/triangulate.html
http://en.wikipedia.org/wiki/Polygon_triangulation (WIKI) http://www.flipcode.com/archives/Efficient_Polygon_Triangulation.shtml (многоугольник без отверстий) http://www.cs.unc.edu / ~dm/CODE/GEM/chapter.html (многоугольник с отверстиями, код C)

решение
Я попробую использовать полигональную тесселяцию для получения треугольников. На сначала я попробую ( http://www.flipcode.com/archives/Efficient_Polygon_Triangulation.shtml) и поскольку мне нужен многоугольник с отверстиями, второй (http://www.cs.unc.edu / ~dm/CODE/GEM/chapter.html). если у кого-то есть лучший способ, пожалуйста, скажите мне с комментарием ^^

спасибо :-)

6 ответов


Cocos2d отличается прохладно библиотека упаковка OpenGL и имеет много полезных функций ( в основном для игр, но не ограничивается ).

для использования тесселяции полигонов : http://flipcode.net/archives/Efficient_Polygon_Triangulation.shtml Я использовал его раньше, и он работал хорошо.


Я не пробовал использовать OpenGL ES, но, судя по быстрому просмотру документации, вы сможете нарисовать выпуклой полигон, используя, например, "треугольник вентилятора":

glVertexPointer(2, ..., arrayOfCoordinates)
...
glDrawElements(GL_TRIANGLE_FAN, ... , arrayOfIndices);

обновление: Я нашел небольшую диаграмму на веб-сайт:http://www.cse.msu.edu/~cse472/step6_stuff/step6.1.gif


на странице разговора о полигональной триангуляции Википедии я утверждаю, что на самом деле больше треугольников будет быстрее.

Я написал триангуляции который поддерживает отверстия и работает в O(N log (n)) время. Я тестировал его под Gdk, а затем сделал из него приложение для Android.


каков ваш окончательный выбор? Недавно я тестировал 5 библиотек, перечисленных ниже по ссылке:http://vterrain.org/Implementation/Libs/triangulate.html

но ни один из них не удовлетворяет...

  1. iphone-glu: (http://code.google.com/p/iphone-glu/)

    • ошибки в алгоритме? есть крошечные отверстия, не заполненные, или иногда рисовать вне полигона
  2. Triangulte: (http://www.flipcode.com/archives/Efficient_Polygon_Triangulation.shtml)

    • не поддерживает дыры...
  3. триангуляция: (http://www.cs.unc.edu/~dm/CODE/GEM/chapter.html)

    • багги, иногда выбегает за пределы или отрицательный индекс и т. д...
  4. poly2tri: (http://code.google.com/p/poly2tri/)

    • багги, авария в некоторых дела
  5. openglespolygon: (https://github.com/nroets/OpenGlEsPolygon)

      несовершенны? по краям многоугольника есть крошечные отверстия (не заполненные)

в не-ES OpenGL, как правило, используется tessellator из библиотеки утилиты GL (glu). Я нашел этот проект который стремится сделать glu доступным для iPhone, и он утверждает, что поддерживает полигональную тесселяцию - если он работает, то это был бы хороший вариант.


когда вам нужно сделать триангуляция полигонов с отверстиями, вы можете попробовать использовать GPC. Существует функция для tringulation называется gpc_polygon_to_tristrip.

для рендеринга использовать GL_TRIANGLE_STRIP.

но сначала прочитайте лицензию gpc!