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

标签 android opengl-es drawing polygons

我正在使用 OpenGL ES 创建适用于 Android 的 2D Openstreetmap 渲染应用程序。

不幸的是,我正在努力绘制由大约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);

只要我的多边形不太复杂,这种方法就可以正常工作,例如绘制这样的多边形完全没有问题:

enter image description here

我的问题是,GL_TRIANGLE_FAN 总是从第一个点(在本例中为 a)开始,然后使用另外 2 个点绘制三角形,直到整个形状完成。

如果必须绘制更复杂的多边形,这可能会导致问题,您可以在此处看到: (在这个例子中,流经城市的河流是一个复杂的多边形) enter image description here

我现在的问题是如何避免这个问题,以便即使是复杂的多边形也能正确绘制并填充?

问题出在绘制凹多边形上。

当使用 GL_TRIANGLE_STRIP 而不是 GL_TRIANGLE_FAN 时,多边形被正确绘制,但只有它们的点通过三角形连接在一起,多边形本身没有被填充。

最佳答案

由于您在谈论 OpenGL ES,因此它与此处的 iOS 问题非常相似:OpenGL ES - How to Draw a filled Polygon?

在上面的帖子中,我列出并测试了 5 个第 3 方三角剖分库,但没有一个令人满意。

总结:

  1. OpenGL ES 没有三角测量,因此不支持绘制填充的凹多边形(更不用说带孔的多边形...)
  2. 要坚持使用 OpenGL ES 绘图,您必须找到用于三角测量的第 3 方库(这并不容易...)
  3. 使用graphics.Paint(Android)/CoreGraphics(iOS)绘制填充路径,但性能较低

我一直在寻找一个轻量级免费的三角剖分库,但是......

关于Android OpenGL ES - 如何绘制填充的凹多边形?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21007802/

相关文章:

ios - 如何在iOS中绘制类似图形的平行四边形?

android - 嵌套 ScrollView 中的 ESRI map

Android smack 库订阅(不显示入站或出站通知)

android - Proguard 返回错误代码 1。请参阅控制台 Android

java - 近距离的物体看起来被拉伸(stretch)/改变消失点?

ios - 打开 GL ES 1 和 iOS 5 引用

Android Matrix.multiplyMV 没有通过翻译改变我的结果

java - ImageAdapter 没有封闭错误

java - libGDX - 如何将多边形绘制为一条线(斜接连接类型)?

javascript - JavaScript 中的桑基图