我使用a C++ wrapper of the Triangle library并且无法摆脱多边形之外的三角形。
这是我想要的:
这就是我在Triangle中所得到的:
(我故意不填充三角形以显示多边形中有一些三角形)
我尝试使用光线投射算法去除外部三角形(找到三角形边缘的中心并查看它是否是多边形。如果至少有一个不是,那么不要画这个三角形)但它是我的目的很慢(多边形每帧更新)。我错过了什么?我应该将哪些参数传递给三角形来三角化凹多边形?
如果不能用Triangle做我想做的事,有人会建议我快速绘制多边形的方法(我的程序使用Qt快速场景图,我只限于以三角形或凸多边形绘制OpenGL要求)?目前我想尝试GLU的曲面细分方法和使用模板缓冲区绘图。我还打算尝试this library。
答案 0 :(得分:2)
绘制一般凹多边形至少有两种方法:
应用三角测量算法。这是你一直在尝试的。应该有大量关于该主题的文献,以及您可以使用的源代码。
使用模板缓冲区。我对这些旧问题的回答说明了这一点:Black out everything outside a polygon,How to force openGL to draw a non-convex filled polygon。
但是,如果您只需要绘制在示例中使用的半月形类型,而不是任意凹多边形,则这一切看起来都比必要复杂得多。您可以轻松构建三角形条以表示此形状。
您当前的半月可能会使用看起来像这样的顶点序列进行渲染,它按照(凹)多边形所需的顺序定义顶点:
0 9
17 10
1 16 11 8
15 12
2 14 13 7
3 6
4 5
您可以通过不同地排序顶点来直接使用基本类型GL_TRIANGLE_STRIP
渲染此形状,以便底部圆弧的顶点与顶部圆弧的顶点交替:
0 17
2 16
1 4 14 15
6 12
3 8 10 13
5 11
7 9
答案 1 :(得分:0)
GLU tesselation解决了这个问题。它显示出高性能和良好的三角测量质量,并且在我的笔记本电脑以及Android平板电脑Nexus 7上运行良好。您可以找到GLU libtess here的自包含版本。
答案 2 :(得分:0)
你可以尝试使用命中测试的隐藏位图,但它只在输出上工作。我为等高线图做了这个:https://cntm.codeplex.com/。或者你可以尝试alpha形状。它被定义为删除超过alpha的边缘。