JavaFX TriangleMesh渲染不正确

时间:2016-06-11 01:32:37

标签: javafx javafx-8 javafx-3d

我为JavaFX三角网格解析器构建了一个OBJ,并从blender导入了猴头样本模型,但它无法正确渲染。它几乎似乎有类似墙壁的效果。这个链接有我想要导入的对象以及显示问题的视频。 Link。这是我正在使用的代码。

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

2 个答案:

答案 0 :(得分:1)

事实证明解决方案非常简单,与我的OBJ代码无关。 Scene构造函数使用布尔参数来确定是否启用了深度缓冲。如果使用不采用深度缓冲参数的构造函数,则默认为false。将其设置为true可以完全解决问题。

答案 1 :(得分:0)

已经有一些3D模型JavaFX导入器了。

您可以从OpenJFX项目中查看3DViewer项目。它是开源的。

如果克隆项目,构建并运行它,您将能够导入obj文件:

3DViewer

如您所见,obj文件没有问题。

您可以查看OBJ导入器的code,了解如何解析obj文件并将其转换为TriangleMesh

其他导入者可以在interactivemesh.org找到,但它不是开源的。

关于你提到的问题,你可以玩剔除的脸:

meshView.setCullFace(CullFace.BACK);

meshView.setCullFace(CullFace.FRONT);

会改变缠绕三角形的顺序,影响你看模型的方式。默认为BACK。