繁体   English   中英

使用Triangle库对凹面进行三角剖分

[英]Triangulation of concave polygon using Triangle library

我使用的是Triangle库的C ++包装器,无法摆脱多边形之外的三角形。

这是我想要得到的:

目标

这是我对Triangle的了解:

用Triangle三角剖分后的多边形

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

我尝试使用射线投射算法消除外部三角形(查找三角形边缘的中心并查看其是否在多边形中。如果至少一个不存在,则不要绘制该三角形),但是对于我而言,它的速度非常慢(多边形每帧更新一次)。 我错过了什么? 我应该将哪些参数传递给Triangle以对凹面进行三角剖分?

如果无法用Triangle做我想做的事,有人可以建议我一种绘制多边形的快速方法(我的程序使用Qt Quick Scene Graph,并且我只能按照OpenGL的要求仅在三角形或凸多边形中绘制)? 目前,我想尝试使用GLU的细分方法并使用模板缓冲区进行绘制。 我也打算尝试这个图书馆

至少有两种绘制普通凹面的方法:

  1. 应用三角剖分算法。 这就是您一直在尝试的方法。 关于该主题的文献应该很多,也许您可​​以使用源代码。

  2. 使用模板缓冲区。 我对这些较早出现的问题的回答就说明了这一点: 涂黑多边形 外的所有内容如何强制openGL绘制非凸填充多边形

但是,如果只需要绘制示例中使用的半月型形状,而不是任意的凹多边形,则这似乎比所需的复杂得多。 您可以轻松地构建一个三角形条来表示此形状。

您当前的半月可能是用看起来像这样的顶点序列渲染的,该顶点序列按(凹形)多边形所需的顺序定义了顶点:

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

GLU镶嵌消除了该问题。 它显示出高性能和良好的三角剖分质量,并且可以在我的笔记本电脑和Android平板电脑Nexus 7上正常运行。您可以在此处找到自包含的GLU libtess版本。

您可以通过命中测试来尝试隐藏的位图,但是它仅在输出中起作用。 我这样做是为了绘制等高线图: https : //cntm.codeplex.com/ 或者,您可以尝试使用Alpha形状。 定义为去除超过alpha的边缘。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM