我正在使用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](https://istack.dev59.com/4yB6k.gif)
如果需要绘制更复杂的多边形,则可能会出现问题,就像这里看到的一样: (在此示例中,流经城市的河流是一个复杂的多边形)
![enter image description here](https://istack.dev59.com/DcRhd.webp)
问题出在绘制凹多边形上。
当使用GL_TRIANGLE_STRIP而不是GL_TRIANGLE_FAN时,多边形被绘制正确,但仅通过三角形将它们的点连接在一起,而多边形本身没有填充。