Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java FX 3D视图中的意外平面_Java_Javafx_Javafx 3d - Fatal编程技术网

java FX 3D视图中的意外平面

java FX 3D视图中的意外平面,java,javafx,javafx-3d,Java,Javafx,Javafx 3d,在Java FX线程中生成3D网格后,我想显示3D网格,但在最终视图中,我可以看到这两个视图-此网格和意外的平面,这会中断正确的形状/网格 我如何发现问题? 首先,我创建了一个测试JavaFX应用程序,我想在其中显示生成的网格。正如您在此处看到的,它工作正常: 代码如下: public class Main extends Application { @Override public void start(Stage arg0) throws Exception { Group me

在Java FX线程中生成3D网格后,我想显示3D网格,但在最终视图中,我可以看到这两个视图-此网格和意外的平面,这会中断正确的形状/网格

我如何发现问题? 首先,我创建了一个测试JavaFX应用程序,我想在其中显示生成的网格。正如您在此处看到的,它工作正常:

代码如下:

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();
}
}
接下来,我想在适当的应用程序中使用此代码,在经过一些计算后,在新窗口中显示此网格。这一次,出现了问题,您可以在此处看到:

这方面的代码几乎相同,但这次它不是一个独立的应用程序,而是由另一个JavaFX线程创建的窗口。重要的是,在这两种情况下,我都使用了相同的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();
}
}

如果您有任何想法或建议,我将不胜感激。

如果您的网格不存在,两个画布/窗格/是否显示相同的空白区域?如果您的意思是在未添加网格时是否显示此非所需平面,答案是:是的,它们显示。为了检查这一点,我删除了以下行:
root.getChildren().add(meshGroup)
在第一个代码段中,
Stage primaryStage=new Stage()实际上不存在,是吗?在第二个阶段中,您有一个初级阶段,并且在第二个阶段(窗口)中显示了meshView?我不确定是否理解您的第一个问题。在这两种情况下,当我使用新创建的Stage对象或使用默认对象(作为
arg0
variable传递)时,我都会得到相同的效果。我只是想添加一些最不一样的片段。对于第二个问题,实际上我在主阶段的根控制器中创建了一个
ChartGenerator
对象,然后调用
show()
方法,该方法使用网格创建第二个阶段,我在您的代码片段中看不到任何差异,因此很难说有什么问题。对我来说,我会说有一个2D平面从一个可能的节点添加到场景中,在
z=0
中,切割网格。您可以向摄影机添加旋转,并尝试从该平面的两侧查看?您还可以检查,并找出该节点的来源。