不同平面上多边形之间的三角剖分

时间:2014-12-08 23:06:47

标签: c++ opengl triangulation

我想在两组多边形之间进行三角测量。一组总是在另一组内,事实上,外多边形被创建为原始集的偏移。如果它们在同一平面上,三角测量将很容易,但我想通过将外多边形移动到平行但不同的平面来增加深度。我使用的常用三角测量方法(glu tesselator)不起作用。有没有替代方案呢?

3 个答案:

答案 0 :(得分:5)

你说你有一个在2D中工作的三角测量方法。精细。将两个轮廓放在同一平面z = 0上,进行二维三角剖分,然后将外轮廓顶点的z坐标设置为所需的值。如上所述,将外轮廓移动到平行平面。

为什么这种方法不适合你?

是的,您最终可能会得到一些水平三角形,它们的所有三个顶点都具有相同的z坐标。如果你使用了“真正的”3D三角测量,你也可能会得到相同的水平三角形。这一切都取决于轮廓和算法的形状。

如果不能接受这样的水平三角形,你可以添加第二遍以试图消除它们:

找到一个水平三角形。它的两个边缘属于原始内部轮廓或原始外部轮廓。第三个边缘将“短路”原始轮廓的顶点。找到另一个与上述“第三”边缘具有相同边的三角形。这对三角形形成菱形。只有两种方法来对菱形进行三角测量。你得到的那个是不可接受的,所以只是以不同的方式对菱形进行重新三角化。

没有图纸很难解释这一点。

答案 1 :(得分:3)

当您移动外部多边形时,IMO可以尝试在3d中进行delaunay三角测量,例如使用环形球。 Cgal可以做三维三角测量。

答案 2 :(得分:3)

如果我理解你的问题是正确的,那听起来你正试图做有时被称为挤压的事情,就像这样 an example extrusion
有许多字体库可以为OpenGL做你想做的事情。虽然有关此page的信息有些过时,但我听说过有关GLTT的好消息。

如果你想自己做,你可能只需要一个连接两个轮廓的简单三角形条带(假设它们连接在[数学图形意义上]),并且可能不需要曲面细分器(除了创建第一个轮廓)。

假设“内部”轮廓是从曲面细分器发出的轮廓,并记录其周边顶点。然后如您所说,通过将每个内部顶点平移一些偏移(可能使用同一平面中顶点处的正交[正交于切线]或其他任何内容)来创建“外部”轮廓(您想要偏移的轮廓) ,然后添加挤出深度。如果保持相同的一般拓扑(即,每个顶点具有相同数量的顶点和相同的连接信息),则可以将该组轮廓“缝合”成单个三角形条带。根据您正在寻找的效果,您可能需要在外部轮廓上添加其他顶点,以使其更美观。这不是真正的问题,除了它使连接轮廓的三角形条带更复杂。