Java 修剪三角形网格

Java 修剪三角形网格,java,3d,javafx,mesh,java-3d,Java,3d,Javafx,Mesh,Java 3d,我能够从.stl文件加载三角形网格。我会画,一切都很好。然而,当我需要从一个形状“裁剪”这个三角形网格时,事情就变得复杂了。我想要一个如下所示的方法: public TriangleMesh cropFrom(Shape shape) { TriangleMesh croppedTriangleMesh = new TriangleMesh(); for (Point point : currentTriangleMesh.getPoints()) { if (

我能够从.stl文件加载三角形网格。我会画,一切都很好。然而,当我需要从一个形状“裁剪”这个三角形网格时,事情就变得复杂了。我想要一个如下所示的方法:

public TriangleMesh cropFrom(Shape shape) {
    TriangleMesh croppedTriangleMesh = new TriangleMesh();

    for (Point point : currentTriangleMesh.getPoints()) {
        if ( shape.contains(point) ) {
            // Let the magic happens!
        }
    }

    return croppedTriangleMesh;
}
我知道三角形网格与点(x、y、z)、面和纹理坐标一起工作。我不知道如何检索给定点的相关面和纹理坐标(反之亦然)。我不知道该怎么开始,也不知道该从哪里看。这似乎不是一个热门话题


提前感谢您的时间和帮助

您可能需要研究多边形网格的布尔运算。这通常是一个困难的操作,可以很容易地完成,但不可靠,如以下方法:

  • 分割两个对象的所有相交曲面
  • 无论是使用光线跟踪还是使用邻接信息,都可以识别在任一对象中哪些曲面在内部和外部
  • 最后,根据需要执行的操作,仅保留选定曲面
    • 交集-将A的PERT保持在B内,将B的部分保持在A内
    • 并集-将A的PERT保持在B之外,将B的部分保持在A之外
    • 差异A-B-将A部分保持在B外部,将B部分保持在A内部(并翻转法线)
另外,也有使用多精度算法和将多边形对象转换为边界平面表示的方法,这些方法速度较慢且难以实现

最好使用其中一个库来实现这一点,例如(许多库中的一个)