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);
обновление: Я нашел небольшую диаграмму на веб-сайт:
на странице разговора о полигональной триангуляции Википедии я утверждаю, что на самом деле больше треугольников будет быстрее.
Я написал триангуляции который поддерживает отверстия и работает в O(N log (n)) время. Я тестировал его под Gdk, а затем сделал из него приложение для Android.
каков ваш окончательный выбор? Недавно я тестировал 5 библиотек, перечисленных ниже по ссылке:http://vterrain.org/Implementation/Libs/triangulate.html
но ни один из них не удовлетворяет...
-
iphone-glu: (http://code.google.com/p/iphone-glu/)
- ошибки в алгоритме? есть крошечные отверстия, не заполненные, или иногда рисовать вне полигона
-
Triangulte: (http://www.flipcode.com/archives/Efficient_Polygon_Triangulation.shtml)
- не поддерживает дыры...
-
триангуляция: (http://www.cs.unc.edu/~dm/CODE/GEM/chapter.html)
- багги, иногда выбегает за пределы или отрицательный индекс и т. д...
-
poly2tri: (http://code.google.com/p/poly2tri/)
- багги, авария в некоторых дела
-
openglespolygon: (https://github.com/nroets/OpenGlEsPolygon)
- несовершенны? по краям многоугольника есть крошечные отверстия (не заполненные)
в не-ES OpenGL, как правило, используется tessellator из библиотеки утилиты GL (glu). Я нашел этот проект который стремится сделать glu доступным для iPhone, и он утверждает, что поддерживает полигональную тесселяцию - если он работает, то это был бы хороший вариант.
когда вам нужно сделать триангуляция полигонов с отверстиями, вы можете попробовать использовать GPC.
Существует функция для tringulation называется gpc_polygon_to_tristrip
.
для рендеринга использовать GL_TRIANGLE_STRIP
.
но сначала прочитайте лицензию gpc!