OpenGL ES - Как нарисовать заполненный многоугольник? - PullRequest
8 голосов
/ 06 октября 2010

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

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

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

I Я не хочу использовать CoreGraphics , это слишком медленно для того, что я делаю*: Работая над проблемой, вот несколько полезных ссылок (будут редактироваться)
Ссылки
- Триангуляция полигонов
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 ]

6 голосов
/ 06 октября 2010

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

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

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

ОБНОВЛЕНИЕ: Я нашел небольшую диаграмму в сети: http://www.cse.msu.edu/~cse472/step6_stuff/step6.1.gif

3 голосов
/ 06 октября 2010

Cocos2D - это классная библиотека, упаковывающая OpenGL и обладающая множеством полезных функций (в основном для игр, но не ограничиваясь ими). ​​

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

2 голосов
/ 27 октября 2011

Какой у вас окончательный выбор? Я недавно проверил 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)

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

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

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

0 голосов
/ 31 января 2014

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

.

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

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

0 голосов
/ 06 октября 2010

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

...