2017-10-28 67 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