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

NDK 专栏收录该内容
1 篇文章 0 订阅

最近在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
    评论
  • 2
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

promotergmy

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值