2 votes

Le rendu de JavaFX TriangleMesh est incorrect

J'ai construit un analyseur de maillage triangulaire OBJ vers JavaFX et j'ai importé le modèle type de tête de singe de Blender, mais le rendu n'est pas correct. Il semble presque avoir un effet de type wallhack. Ce lien contient l'objet que j'essaie d'importer ainsi qu'une vidéo montrant le problème. Lien . Voici le code que j'utilise.

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

1voto

Scoopta Points 347

Il s'avère que la solution était vraiment très simple et n'avait rien à voir avec mon code OBJ. Le site Scene Le constructeur prend un paramètre booléen pour déterminer si la mise en mémoire tampon de la profondeur est activée ou non. Si vous utilisez un constructeur qui ne prend pas de paramètre pour la mise en mémoire tampon de la profondeur, la valeur par défaut est false. Si vous le réglez sur true, le problème est résolu.

0voto

José Pereda Points 22902

Il existe déjà quelques importateurs de modèles 3D JavaFX.

Vous pouvez vérifier le 3DViewer du projet OpenJFX. Il s'agit d'une source ouverte.

Si vous clonez le projet, le construisez et l'exécutez, vous pourrez importer votre fichier obj :

3DViewer

Comme vous pouvez le voir, il n'y a aucun problème avec le fichier obj.

Vous pouvez jeter un coup d'œil à la code pour l'importateur OBJ, afin de savoir comment un fichier obj est analysé et converti en un fichier de type TriangleMesh .

Vous trouverez d'autres importateurs sur le site interactivemesh.org mais il n'est pas open source.

En ce qui concerne le problème que vous avez mentionné, vous pouvez jouer avec le visage d'élimination :

meshView.setCullFace(CullFace.BACK);

o

meshView.setCullFace(CullFace.FRONT);

changera l'ordre d'enroulement des triangles, ce qui affectera la façon dont vous voyez le modèle. La valeur par défaut est BACK.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X