我的问题是我正在尝试将 3D 模型从 STL 文件导入 JavaFX 应用程序。我按照此链接中的代码How to create 3d shape from STL in JavaFX 8? 它只适用于那里提到的宝石文件,但我尝试过使用其他 STL 文件,但它不起作用!
我不明白为什么它不能与其他文件一起使用。谁能解释一下?任何帮助,请尽快!
我的问题是我正在尝试将 3D 模型从 STL 文件导入 JavaFX 应用程序。我按照此链接中的代码How to create 3d shape from STL in JavaFX 8? 它只适用于那里提到的宝石文件,但我尝试过使用其他 STL 文件,但它不起作用!
我不明白为什么它不能与其他文件一起使用。谁能解释一下?任何帮助,请尽快!
由于您已经在使用该站点的 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);