java FX 3D视图中的意外平面
在Java FX线程中生成3D网格后,我想显示3D网格,但在最终视图中,我可以看到这两个视图-此网格和意外的平面,这会中断正确的形状/网格 我如何发现问题? 首先,我创建了一个测试JavaFX应用程序,我想在其中显示生成的网格。正如您在此处看到的,它工作正常: 代码如下: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
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
中,切割网格。您可以向摄影机添加旋转,并尝试从该平面的两侧查看?您还可以检查,并找出该节点的来源。