Javafx导入的三维模型显示不正确
我正在Javafx中与interactivemesh.org的3d模型导入器玩。在场景中导入模型时不会出错。然而,这些模型以一种奇怪的方式展示出来。显示其他面后面的一些面,即使它们应该被前面的面覆盖。我试过tdsImporter,以及obj和fxml导入器,都遇到了相同的问题。模型在模型浏览器中显示正确,因此我猜我的代码有问题。以下是该模型的外观(在不同的计算机上试用): interactivemesh.org上的HST模型 还有我用于3ds导入的源代码: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
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);
非常感谢,这解决了我的问题!!祝你有美好的一天