OpenGL ES - 如何绘制填充的多边形?

时间:2010-10-06 12:36:01

标签: iphone opengl-es polygon tessellation

我尝试使用谷歌搜索和搜索堆栈,但我没有找到任何东西:-(
Mapping irregular shapes or other polygons (cartoons, sprites) to triangles in OpenGL ES

我想在iPad上的 OpenGL ES 中绘制填充多边形(2D,不需要3D) (我是OpenGL&& OpenGL ES的新手) 在OpenGL上似乎很简单但是使用ES只能绘制三角形。

但我找不到任何关于此的好教程:-( 是否存在任何可以帮助我的包装器/库或其他任何东西?

不想使用CoreGraphics ,这对我正在做的事情来说太慢了^^
如果可能的话,避免像Cocos2D这样的(大)库。

编辑:处理问题,这里有一些有用的链接(将会编辑)
链接
- 多边形三角剖分
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 个答案:

答案 0 :(得分:6)

我还没有尝试过使用OpenGL ES,但是从文档中快速浏览一下,您应该可以使用以下方法绘制多边形。一个“三角扇”:

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

你可以把一个“三角扇”想象成一个自行车车轮的辐条,将车轮区域划分为“三角形”(自行车车轮的外缘当然是圆形的,但我希望你能得到这个想法)。

更新:我在网上找到了一个小图:http://www.cse.msu.edu/~cse472/step6_stuff/step6.1.gif

答案 1 :(得分:3)

Cocos2D是包含OpenGL的酷炫图书馆,有许多有用的功能(主要用于游戏,但不限于此)。

对于多边形镶嵌使用: http://flipcode.net/archives/Efficient_Polygon_Triangulation.shtml 我之前使用它并且效果很好。

答案 2 :(得分:2)

在Wikipedia Polygon Triangulation Talk页面上,我认为更多的三角形实际上会更快。

我写了一个支持空洞的triangulation engine并在O(n log(n))时间内运行。我在Gdk下测试了它,然后用它制作了一个Android应用程序。

答案 3 :(得分:2)

你最后的选择是什么? 我最近测试了以下链接中列出的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/)

    • Buggy,在某些情况下崩溃
  5. openglespolygon:(https://github.com/nroets/OpenGlEsPolygon)

    • 不完美的算法?沿着多边形边缘有小孔(未填充)

答案 4 :(得分:0)

在非ES OpenGL中,人们倾向于使用GL Utility(glu)库中的曲面细分器。我发现this project的目的是让iPhone可用于iPhone,它声称支持多边形镶嵌 - 如果它有效,那么它将是一个不错的选择。

答案 5 :(得分:0)

如果需要对带孔的多边形进行三角测量,可以尝试使用GPC。 有一种称为gpc_polygon_to_tristrip的促进作用。

对于渲染使用GL_TRIANGLE_STRIP

但首先阅读gpc许可证!