2017-10-28 4 views
1

Ich spiele mit den 3D-Modell-Importeure von interactivemesh.org in Javafx. Der Import der Modelle in einer Szene funktioniert ohne Fehler. Die Modelle werden jedoch auf seltsame Weise angezeigt. Einige der Gesichter hinter anderen Gesichtern werden angezeigt, obwohl sie von den Vorderseiten bedeckt sein sollten. Ich habe den tdsImporter, sowie obj und das fxml Importer versucht, alle das gleiche Problem zu treffen. Die Modelle werden im Modellbrowser korrekt angezeigt, daher denke ich, dass mit meinem Code etwas nicht stimmt. Hier ist, was das Modell aussieht (versuchte es auf verschiedenen Rechnern):Javafx importiert 3D-Modell falsch angezeigt

HST Modell von interactivemesh.org

enter image description here

Auch der Quellcode ich für die 3ds verwenden importieren:

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

Hat jemand eine Idee, was das Problem sein könnte und wie man es beheben kann?

Antwort

2

Nach dem Scene Javadoc-:

Eine Anwendung kann auf der Schaffung einer Szene Tiefenpufferunterstützung oder die Szene Anti-Aliasing-Unterstützung anfordern. [...] Eine Szene, die 3D-Formen oder 2D-Formen mit 3D-Transformationen enthält, kann die Tiefenpuffer-Unterstützung für ein korrektes Tiefensortieren verwenden. [...] Eine Szene mit 3D-Formen kann Szenen-Anti-Aliasing ermöglichen, um die Wiedergabequalität zu verbessern.

Die Flags depthBuffer und antiAliasing sind bedingte Features. Mit den entsprechenden Standardwerten von: false und SceneAntialiasing.DISABLED.

Also in Ihrem Code, versuchen:

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

oder noch besser:

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

Thank you so viel, dass mein Problem gelöst !! Ich wünsche ihnen einen wunderbaren Tag – Aviator1983