2017-10-28 130 views
1

我在Javafx中使用interactivemesh.org中的3D模型导入器。场景中的模型导入没有错误。但是,模型正在以一种奇怪的方式显示。即使它们应该被正面覆盖,仍然会显示其他面部后面的一些面部。我已经尝试过tdsImporter,以及obj和fxml导入器,都遇到了同样的问题。模型在模型浏览器中正确显示,所以我想我的代码有问题。下面是模型的样子(尝试了不同的计算机上):Javafx导入的3D模型显示不正确

的HST模式从interactivemesh.org

enter image description here

而且我用了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); 
     } 
    } 

有没有人有一个想法是什么问题,以及如何解决它?

回答

2

按照Scene的Javadoc:

的应用可以在创建场景的请求深度缓冲器支撑或场景抗锯齿支持。 [...]包含具有3D变换的3D形状或2D形状的场景可以使用深度缓冲区支持来进行正确的深度排序渲染; [...]具有3D形状的场景可以使场景抗锯齿来改善其渲染质量。

depthBuffer和antiAliasing标志是条件特征。使用相应的默认值:false和SceneAntialiasing.DISABLED。

因此,在你的代码,请尝试:

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

甚至更​​好:

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

太感谢你了,这解决了我的问题!祝你有美好的一天 – Aviator1983