2

我构建了一个 OBJ 到 JavaFX 三角形网格解析器,并从搅拌机中导入了猴头样本模型,但它没有正确渲染。它几乎似乎具有类似壁挂的效果。此链接包含我要导入的 obj 以及显示问题的视频。链接。这是我正在使用的代码。

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

2 回答 2

1

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

于 2016-07-21T10:28:15.473 回答
0

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

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

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

3D查看器

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

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

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

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

meshView.setCullFace(CullFace.BACK);

或者

meshView.setCullFace(CullFace.FRONT);

将改变三角形的缠绕顺序,影响您查看模型的方式。默认为返回。

于 2016-06-11T12:28:21.963 回答