您的位置:首页 > 运维架构

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

2016-01-24 00:30 531 查看
最近在ndk里面用OpenGL es画海图,然后发现opengl不能直接画凹多边形(只能直接画点、线、三角形),所以寻找多边形切割为三角形的算法。主要方法列举:
http://vterrain.org/Implementation/Libs/triangulate.html
1.其中Efficient
Polygon Triangulation
方法最简单快捷,但是经过我测试,如果是复杂多边形(有重复点,自交,带洞,反向折叠等)则此办法会出错,如果是简单多边形这这个算法最好,算法也简单容易看懂:函数按顺时针取3个点判断是否为凸角(同时其他点不得在其内),如果条件满足则去掉这三点中的中间点,切除出一个三角形,剩下多边形继续切割直到完成。

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

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

Snip函数:判断三点条件。

[code]	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指定设置。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: