2016-06-11 18 views
2

Ich baute ein OBJ zu JavaFX Dreieck Mesh Parser und importierte das Affen Kopf Beispielmodell aus Blender, aber es wird nicht richtig dargestellt. Es scheint fast einen Wallhack-ähnlichen Effekt zu haben. Dieser Link hat das Objekt, das ich versuche zu importieren, sowie ein Video, das das Problem zeigt. Link. Dies ist der Code, den ich verwende.JavaFX TriangleMesh Rendering falsch

if(tmp.startsWith("v ")) { 
    split = tmp.split(" "); 
    verticies.add(Float.parseFloat(split[1])); 
    verticies.add(Float.parseFloat(split[2])); 
    verticies.add(Float.parseFloat(split[3])); 
} else if(tmp.startsWith("f ")) { 
    split = tmp.split("f |/\\d*/\\d* *"); 
    faces.add(Integer.parseInt(split[1]) - 1); 
    faces.add(Integer.parseInt(split[2]) - 1); 
    faces.add(Integer.parseInt(split[3]) - 1); 
    if(split.length > 4) { 
     faces.add(Integer.parseInt(split[3]) - 1); 
     faces.add(Integer.parseInt(split[4]) - 1); 
     faces.add(Integer.parseInt(split[1]) - 1); 
    } 
} 

Antwort

1

Es stellte sich heraus, dass die Lösung wirklich sehr einfach war und nichts mit meinem OBJ-Code zu tun hatte. Der Scene-Konstruktor akzeptiert einen booleschen Parameter, um zu bestimmen, ob die Tiefenpufferung aktiviert ist oder nicht. Wenn Sie einen Konstruktor verwenden, der keinen Tiefenpufferungsparameter verwendet, wird standardmäßig false verwendet. Wenn Sie es auf "true" setzen, wird das Problem vollständig behoben.

0

Es gibt bereits ein paar 3D-Modell JavaFX-Importeure da draußen.

Sie können das Projekt 3DViewer aus dem OpenJFX-Projekt überprüfen. Es ist Open Source.

Wenn Sie das Projekt klonen, bauen sie und führen Sie es, können Sie Ihre OBJ-Datei importieren:

3DViewer

Wie Sie sehen können, gibt es keine Probleme mit der OBJ-Datei.

Sie können sich die code für den OBJ-Importeur ansehen, um herauszufinden, wie eine Obj-Datei analysiert und in eine konvertiert wird.

Andere Importeure können bei interactivemesh.org gefunden werden, aber es ist nicht Open Source.

In Bezug auf die Frage, die Sie erwähnt, können Sie mit der Keulung Gesicht spielen:

meshView.setCullFace(CullFace.BACK); 

oder

meshView.setCullFace(CullFace.FRONT); 

wird die Reihenfolge der Wicklung die Dreiecke verändern, beeinflussen, wie Sie das Modell. Standard ist ZURÜCK.

+0

Ich habe mit Face Culling gespielt, aber das hat nicht geholfen, weshalb ich gepostet habe. Es bei BACK zu lassen funktioniert am besten. – Scoopta

+0

Überprüfen Sie dann mit dem OBJImpoter, ob Ihr Code das gleiche TrangleMesh erzeugt –