0

我的问题是我正在尝试将 3D 模型从 STL 文件导入 JavaFX 应用程序。我按照此链接中的代码How to create 3d shape from STL in JavaFX 8? 它只适用于那里提到的宝石文件,但我尝试过使用其他 STL 文件,但它不起作用!

我不明白为什么它不能与其他文件一起使用。谁能解释一下?任何帮助,请尽快!

4

1 回答 1

4

由于您已经在使用该站点的 STL 导入器,因此您会在同一个 Web 中找到一个3D 模型浏览器,您可以使用它来预览模型,然后再将它们导入 JavaFX 应用程序。

如果无法使用此浏览器导入它们,则问题可能与您的文件中的无效 STL 格式有关。

如果它们被导入,那么问题可能出在您的应用程序中。将调用嵌入到 try-catch 中并发布您可能遇到的异常。

StlMeshImporter stlImporter = new StlMeshImporter(); 

try {
    stlImporter.read(this.getClass().getResource("<STLfile>.stl"));
}
catch (ImportException e) {
    e.printStackTrace();
    return;
}

编辑

如果在读取模型时没有抛出异常,下一步是将返回的网格插入 aMeshView并在我们的场景中显示:

TriangleMesh mesh = stlImporter.getImport();
stlImporter.close();
MeshView mesh=new MeshView(cylinderHeadMesh);
Group root = new Group(mesh);
Scene scene = new Scene(root, 1024, 800, true);
Camera camera = new PerspectiveCamera();
scene.setCamera(camera);
primaryStage.setScene(scene);
primaryStage.show(); 

由于模型对于我们的场景可能太小或太大(与相机和我们使用的视角有关),我们应该打印模型的边界框,然后相应地放大或缩小它:

System.out.println("mesh: "+mesh.getBoundsInLocal().toString());
mesh.setScaleX(1d);
mesh.setScaleY(1d);
mesh.setScaleZ(1d);

或者我们可以更改相机参数:

double max = Math.max(mesh.getBoundsInLocal().getWidth(),
              Math.max(mesh.getBoundsInLocal().getHeight(),
                       mesh.getBoundsInLocal().getDepth()));
camera.setTranslateZ(-3*max);
于 2014-12-20T19:19:55.777 回答