我能够从.stl文件加载一个TriangleMesh。我可以画出来,一切都很好。然而,当我需要从形状中"裁剪"这个TriangleMesh时,事情就变得复杂了。我想要一个像这样的方法:
public TriangleMesh cropFrom(Shape shape) {
TriangleMesh croppedTriangleMesh = new TriangleMesh();
for (Point point : currentTriangleMesh.getPoints()) {
if ( shape.contains(point) ) {
// Let the magic happens!
}
}
return croppedTriangleMesh;
}
我知道TriangleMesh与点(x, y, z),面和纹理坐标一起工作。我不知道如何检索相关的面孔和纹理坐标给定一个点(或反之亦然)。我不知道该怎么开始,从哪里开始看。这似乎不是一个热门话题。
提前感谢您的时间和帮助!
您可能想要查看多边形网格的布尔运算。这通常是一个困难的操作,可以很容易地完成,但不健壮,例如以下方法:
- 拆分两个对象的所有相交表面
- 无论是使用光线追踪还是使用邻接信息,确定物体的内部和外部表面
- 最后,根据需要进行的操作,只保留选定的表面
- 交叉点-将A的部分保留在B内,将B的部分保留在A内
- 联盟-保持A的部分在B之外,B的部分在A之外
- 差异A - B -保持部分A在B外,部分B在A内(并翻转正常)
或者,也有使用多重精度算法和将多边形对象转换为边界平面表示的方法,这些方法速度较慢且难以实现。
最好使用其中一个库来实现它,例如CGAL(众多库中的一个)。