opengl es画凹多边形问题:切割凹多边形为三角形

来源:互联网 发布:风速仪上位机软件 编辑:程序博客网 时间:2024/05/01 21:20

最近在ndk里面用OpenGL es画海图,然后发现opengl不能直接画凹多边形(只能直接画点、线、三角形),所以寻找多边形切割为三角形的算法。主要方法列举:

http://vterrain.org/Implementation/Libs/triangulate.html

1.其中Efficient Polygon Triangulation方法最简单快捷,但是经过我测试,如果是复杂多边形(有重复点,自交,带洞,反向折叠等)则此办法会出错,如果是简单多边形这这个算法最好,算法也简单容易看懂:函数按顺时针取3个点判断是否为凸角(同时其他点不得在其内),如果条件满足则去掉这三点中的中间点,切除出一个三角形,剩下多边形继续切割直到完成。

Area函数:计算多边形面积。如果计算的多边形面积是负的则说明是逆时针取点。

InsideTriangle函数:判断P是否在ABC三角形内(用的向量差积法,其实也是面积法)。

Snip函数:判断三点条件。
Process切割函数,当snip满足时,去除一个点,给多边形重新编号,取点向后移2位。(m变量是多余的,作者可能是误写了)。
2.如果你的多边形是复杂的(有重复点,自交,带洞,反向折叠等),则推荐使用GPC(General Polygon Clipping)算法(介绍:http://www.cs.man.ac.uk/~toby/alan/software/gpc.html),其中gpc_tristrip_clip函数是把多边形切割为三角形。算法用的是取顶点画X轴平行线取交点然后划分三角形。具体用法见:http://www.2cto.com/kf/201504/394266.html,另外如果多边形带洞,要用myPolygon.hole指定设置。

0 0
原创粉丝点击