0

我想在 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();
}
}

我会感谢任何想法或建议。

4

0 回答 0