使用C ++中的TetGen加载网格文件

时间:2015-05-11 05:39:47

标签: c++ opengl mesh tetgen

我想在C ++中使用TetGen库加载网格文件,但我不知道正确的程序或在我的代码中激活什么切换以显示Constrained Delaunay网格。

我尝试了一些基本加载a dinosaur mesh (from rocq.inria.fr)的默认行为:

tetgenio in, out;
in.firstnumber = 0;
in.load_medit("TetGen\\parasaur1_cut.mesh",0);
tetgenbehavior *b = new tetgenbehavior();
tetrahedralize(b, &in, &out);

形状应该是这样的:

enter image description here

使用TetView时效果很好。但是使用我的代码我得到了以下结果:

dinosaur mesh result

我尝试激活Delaunay Constraint的Piecewise Linear Complex (plc)属性:

b->plc = 1;

我从网格中得到了几个部分:

a few more parts from dinosaur mesh

也许有更多部分,但我不知道如何获得它们。

1 个答案:

答案 0 :(得分:1)

这看起来很像你可能将四边形网格加载为三角形网格,反之亦然。有一件事是清楚的,你从文件中获取浮点数,因为对象的边界看起来大致正确。确保您正在加载严格的三角形或四边形网格。如果它是一种可以加载到Blender中的格式,我建议加载它,对其进行三角测量,然后重新导出它,以防聚合物进入那里。

另一种可能性是由一个错误索引。您确定以正确的顺序获得每个三角形/四边形吗?也就是说 - 确保加载三角形123 123 123和NOT 1 231 231 231。

另一种可能性,如果此格式索引所有顶点,然后列出顶点的索引,则可能正确加载所有顶点,然后将三角形/四边形的索引弄乱,如上所述在前两段中。我认为情况就是这样,因为它看起来像你的所有点都是正确的,但连接它们的线路是错误的。