我正在使用 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);
只要我的多边形不太复杂,这种方法就可以正常工作,例如绘制这样的多边形完全没有问题:
我的问题是,GL_TRIANGLE_FAN 总是从第一个点(在本例中为 a)开始,然后使用另外 2 个点绘制三角形,直到整个形状完成。
如果必须绘制更复杂的多边形,这可能会导致问题,您可以在此处看到: (在这个例子中,流经城市的河流是一个复杂的多边形)
我现在的问题是如何避免这个问题,以便即使是复杂的多边形也能正确绘制并填充?
问题出在绘制凹多边形上。
当使用 GL_TRIANGLE_STRIP 而不是 GL_TRIANGLE_FAN 时,多边形被正确绘制,但只有它们的点通过三角形连接在一起,多边形本身没有被填充。
最佳答案
由于您在谈论 OpenGL ES,因此它与此处的 iOS 问题非常相似:OpenGL ES - How to Draw a filled Polygon?
在上面的帖子中,我列出并测试了 5 个第 3 方三角剖分库,但没有一个令人满意。
总结:
- OpenGL ES 没有三角测量,因此不支持绘制填充的凹多边形(更不用说带孔的多边形...)
- 要坚持使用 OpenGL ES 绘图,您必须找到用于三角测量的第 3 方库(这并不容易...)
- 使用graphics.Paint(Android)/CoreGraphics(iOS)绘制填充路径,但性能较低
我一直在寻找一个轻量级免费的三角剖分库,但是......
关于Android OpenGL ES - 如何绘制填充的凹多边形?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21007802/