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三角形内(用的向量差积法,其实也是面积法)。
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指定设置。
相关文章推荐
- 什么是REST架构
- 设计自己的高并发架构
- HDU 1678 Shopaholic(贪心)
- Xshell配置ssh免密码登录-密钥公钥(Public key)与私钥(Private Key)登录
- Linux学习笔记(2)----文件权限
- VMware虚拟机克隆Linux系统后找不到eth0网卡的问题
- iTop4412时钟配置
- linux运行时动态调整内核参数工具sysctl学习小结
- docker容器的端口映射(构建nginx容器)
- docker查看镜像和删除镜像
- docker镜像的获取和推送
- android:内部存储空间 IO 操作openFileInput()、output(13)
- 如何让nodejs在linux后台运行
- OpenWrt编译记录
- 自带内存上的读写(openFileOutput和openFileInput)
- centos上安装配置tomcat
- 查找nginx安装的路径以及相关安装操作命令
- Linux常用命令_软件包管理
- 《深入剖析Tomcat》读书笔记(二)
- 架构学习OOP