2017-10-28 7 views
1

私はJavafxのinteractivemesh.orgから3Dモデルのインポータで遊んでいます。シーン内のモデルのインポートはエラーなく実行されます。しかし、モデルは奇妙な方法で表示されています。他の顔の後ろにある顔の一部は、前面で覆われていても表示されます。私はtdsImporterとobjとfxmlのインポーターだけでなく、すべて同じ問題に遭遇しました。モデルはモデルブラウザに正しく表示されているので、私のコードに何か問題があると思います。ここでは(別のコンピュータ上でそれを試してみました)のようなモデルが見えるものです:Javafxインポートされた3Dモデルが正しく表示されない

HSTモデルが

また

enter image description here

私は3DSのインポートに使用するソースコードinteractivemesh.orgから:

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); 
     } 
    } 

誰かが問題がどのようなものであり、どのように修正するか考えていますか? SceneのJavadocによる

答えて

2

シーンの作成時にデプスバッファサポートまたはシーンアンチエイリアシングのサポートを要求することができるアプリケーション。 [...] 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

関連する問題