我想在 Java FX 线程中生成 3D 网格后显示它,但在最终视图中我可以看到两者 - 这个网格和意外平面中断了正确的形状/网格。
我如何找到问题?首先,我创建了一个测试 Java FX 应用程序,我想在其中显示生成的网格。如您在此处看到的,它工作正常:
和这样的代码:
public class Main extends Application {
@Override
public void start(Stage arg0) throws Exception {
Group meshGroup = new Group();
TriangleMesh detectedMesh = new TriangleMesh();
detectedMesh.getTexCoords().addAll(0, 0);
// ... adding points and faces to the mesh from double[][] data
MeshView mv = new MeshView(detectedMesh);
// ... some MeshView settings
meshGroup.getChildren().addAll(mv);
StackPane root = new StackPane();
root.getChildren().add(meshGroup);
Scene scene = new Scene(root, 800, 600, true, SceneAntialiasing.BALANCED);
scene.setCamera(new PerspectiveCamera());
Stage primaryStage = new Stage();
primaryStage.setScene(scene);
primaryStage.show();
}
}
接下来,我想在适当的应用程序中使用此代码,该应用程序经过一些计算后会在新窗口中显示此网格。这一次,问题出现了,你可以在这里看到:
代码几乎相同,但这次它不是一个独立的应用程序,而是由另一个 Java FX 线程创建的窗口。重要的是,在这两种情况下,我都使用了相同的 double[][] 数据。
public class ChartGenerator {
double[][] data;
public ChartGenerator(double[][] data) {
this.data = data;
}
public void show() {
Group meshGroup = new Group();
TriangleMesh detectedMesh = new TriangleMesh();
detectedMesh.getTexCoords().addAll(0, 0);
// ... adding points and faces to the mesh from double[][] data
MeshView mv = new MeshView(detectedMesh);
// ... some MeshView settings
meshGroup.getChildren().addAll(mv);
StackPane root = new StackPane();
root.getChildren().add(meshGroup);
Scene scene = new Scene(root, 800, 600, true, SceneAntialiasing.BALANCED);
scene.setCamera(new PerspectiveCamera());
Stage primaryStage = new Stage();
primaryStage.setScene(scene);
primaryStage.show();
}
}
我会感谢任何想法或建议。