裁剪TriangleMesh

时间:2014-06-25 17:13:33

标签: java 3d javafx mesh java-3d

我能够从.stl文件加载TriangleMesh。我可以画它,一切都很好。然而,当我需要" crop"这个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),面和纹理坐标。我不知道如何在给定点的情况下检索相关面和纹理坐标(反之亦然)。我不确切知道如何开始或在哪里看。它似乎不是一个热门话题。

感谢您提前抽出时间和帮助!

1 个答案:

答案 0 :(得分:0)

您可能希望查看具有多边形网格的布尔运算。这通常是一项艰难的操作,可以轻松完成,但不能很好地完成,例如以下方法:

  • 拆分两个对象的所有相交曲面
  • 使用光线追踪或使用邻接信息,识别哪个表面位于任一对象的内部和外部
  • 最后,根据需要的操作,仅保留选定的曲面
    • 交叉点 - 保持A内部的A和A内部B的部分
    • 联盟 - 保持A的外部B和A部分的A部分
    • 差异A - B - 将A的部分保留在B外,将B的部分保持在A内(并且翻转正常)

或者,有些方法使用多个精确算术并将多边形对象转换为边界平面表示,这些方法较慢且难以实现。

最好使用其中一个库,实现此目的,例如CGAL(其中之一)。