Javafx导入的三维模型显示不正确

Javafx导入的三维模型显示不正确,javafx,import,model,3ds,javafx-3d,Javafx,Import,Model,3ds,Javafx 3d,我正在Javafx中与interactivemesh.org的3d模型导入器玩。在场景中导入模型时不会出错。然而,这些模型以一种奇怪的方式展示出来。显示其他面后面的一些面,即使它们应该被前面的面覆盖。我试过tdsImporter,以及obj和fxml导入器,都遇到了相同的问题。模型在模型浏览器中显示正确,因此我猜我的代码有问题。以下是该模型的外观(在不同的计算机上试用): interactivemesh.org上的HST模型 还有我用于3ds导入的源代码: import com.interac

我正在Javafx中与interactivemesh.org的3d模型导入器玩。在场景中导入模型时不会出错。然而,这些模型以一种奇怪的方式展示出来。显示其他面后面的一些面,即使它们应该被前面的面覆盖。我试过tdsImporter,以及obj和fxml导入器,都遇到了相同的问题。模型在模型浏览器中显示正确,因此我猜我的代码有问题。以下是该模型的外观(在不同的计算机上试用):

interactivemesh.org上的HST模型

还有我用于3ds导入的源代码:

import com.interactivemesh.jfx.importer.tds.TdsModelImporter;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Group;
import javafx.scene.Node;
import javafx.scene.Parent;
import javafx.scene.PerspectiveCamera;
import javafx.scene.Scene;
import javafx.scene.transform.Rotate;
import javafx.scene.transform.Translate;
import javafx.stage.Stage;

public class Test3d extends Application {

    Group group = new Group();

    @Override
    public void start(Stage meineStage) throws Exception {
        Parent root = FXMLLoader.load(getClass().getResource("test.fxml"));

        Scene meineScene = new Scene(root, 1280, 800);
        meineStage.setTitle("Startbildschirm");
        meineStage.setScene(meineScene);
        meineStage.show();
        PerspectiveCamera camera = new PerspectiveCamera(true);
        camera.getTransforms().addAll(
                new Rotate(0, Rotate.Y_AXIS),
                new Rotate(-45, Rotate.X_AXIS),
                new Rotate(-45, Rotate.Z_AXIS),
                new Translate(0, 0, -110));
        meineScene.setCamera(camera);
        camera.setNearClip(0.1);
        camera.setFarClip(200);

        TdsModelImporter tdsImporter = new TdsModelImporter();
        tdsImporter.read("hst.3ds");
        Node[] tdsMesh = (Node[]) tdsImporter.getImport();
       tdsImporter.close();

        for (int i = 0; i < tdsMesh.length; i++) {
          tdsMesh[i].setScaleX(0.1);
          tdsMesh[i].setScaleY(0.1);
          tdsMesh[i].setScaleZ(0.1);
          tdsMesh[i].getTransforms().setAll(new Rotate(60, Rotate.Y_AXIS), new Rotate(-90, Rotate.X_AXIS));
        }

        Group root1 = new Group(tdsMesh);
        meineScene.setRoot(root1);
    }   

    public static void main(String[] args) {
        launch(args); 
        }
    }
import com.interactivemesh.jfx.importer.tds.TdsModelImporter;
导入javafx.application.application;
导入javafx.fxml.fxmloader;
导入javafx.scene.Group;
导入javafx.scene.Node;
导入javafx.scene.Parent;
导入javafx.scene.PerspectiveCamera;
导入javafx.scene.scene;
导入javafx.scene.transform.Rotate;
导入javafx.scene.transform.Translate;
导入javafx.stage.stage;
公共类Test3d扩展了应用程序{
组=新组();
@凌驾
public void start(Stage meineStage)引发异常{
父根=FXMLLoader.load(getClass().getResource(“test.fxml”);
场景meineScene=新场景(根,1280800);
meineStage.setTitle(“Startbildschirm”);
中新世(中新世);
meineStage.show();
透视摄影机=新透视摄影机(真);
camera.getTransforms().addAll(
新旋转(0,旋转Y_轴),
新旋转(-45,旋转X_轴),
新旋转(-45,旋转Z_轴),
新翻译(0,0,-110));
梅内斯新世。设置摄像机(摄像机);
摄像头。setNearClip(0.1);
摄像机。setFarClip(200);
TdsModelImporter tdsImporter=新的TdsModelImporter();
tdsImporter.read(“hst.3ds”);
节点[]tdsMesh=(节点[])tdsImporter.getImport();
tdsImporter.close();
对于(int i=0;i

有人知道问题可能是什么以及如何解决吗?

根据
场景
javadoc:

应用程序可以在创建场景时请求深度缓冲区支持或场景抗锯齿支持。[…]包含3D形状或带有3D变换的2D形状的场景可以使用深度缓冲区支持进行适当的深度排序渲染;[…]具有3D形状的场景可以启用场景抗锯齿以提高其渲染质量

depthBuffer和抗锯齿标志是条件功能。各自的默认值为:false和sceneatialiasing.DISABLED

因此,在您的代码中,请尝试:

Scene meineScene = new Scene(root, 1280, 800, true);
    
或者更好:

Scene meineScene = new Scene(root, 1280, 800, true, SceneAntialiasing.BALANCED);


    

非常感谢,这解决了我的问题!!祝你有美好的一天