三角形库对凹多边形的三角剖分

时间:2016-05-30 18:27:05

标签: c++ qt opengl graphics triangulation

我使用a C++ wrapper of the Triangle library并且无法摆脱多边形之外的三角形。

这是我想要的:

Goal

这就是我在Triangle中所得到的:

Polygon after triangulation with Triangle

(我故意不填充三角形以显示多边形中有一些三角形)

我尝试使用光线投射算法去除外部三角形(找到三角形边缘的中心并查看它是否是多边形。如果至少有一个不是,那么不要画这个三角形)但它是我的目的很慢(多边形每帧更新)。我错过了什么?我应该将哪些参数传递给三角形来三角化凹多边形?

如果不能用Triangle做我想做的事,有人会建议我快速绘制多边形的方法(我的程序使用Qt快速场景图,我只限于以三角形或凸多边形绘制OpenGL要求)?目前我想尝试GLU的曲面细分方法和使用模板缓冲区绘图。我还打算尝试this library

3 个答案:

答案 0 :(得分:2)

绘制一般凹多边形至少有两种方法:

  1. 应用三角测量算法。这是你一直在尝试的。应该有大量关于该主题的文献,以及您可以使用的源代码。

  2. 使用模板缓冲区。我对这些旧问题的回答说明了这一点:Black out everything outside a polygonHow to force openGL to draw a non-convex filled polygon

  3. 但是,如果您只需要绘制在示例中使用的半月形类型,而不是任意凹多边形,则这一切看起来都比必要复杂得多。您可以轻松构建三角形条以表示此形状。

    您当前的半月可能会使用看起来像这样的顶点序列进行渲染,它按照(凹)多边形所需的顺序定义顶点:

    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的边缘。