JavaFX TriangleMesh渲染不正确
问题描述:
我构建了一个OBJ到JavaFX三角形网格分析器,并从搅拌器导入了猴头样本模型,但它无法正确呈现。它几乎似乎有一个wallhack效果。这个链接有我试图导入的obj以及显示问题的视频。 Link。这是我正在使用的代码。JavaFX TriangleMesh渲染不正确
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);
}
}
答
原来这个解决方案非常简单,与我的OBJ代码无关。 Scene
构造函数采用布尔参数来确定是否启用深度缓冲。如果您使用不带深度缓冲参数的构造函数,则默认为false。将其设置为true可以完全解决问题。
答
这里已经有几个3D模型的JavaFX导入器了。
您可以从OpenJFX项目中检查3DViewer项目。它是开源的。
如果克隆项目,建立并运行它,你就可以导入OBJ文件:
正如你所看到的,也有与OBJ文件没有问题。
您可能需要查看OBJ导入程序的code,以了解如何解析obj文件并将其转换为TriangleMesh
。
其他进口商可在interactivemesh.org找到,但它不是开源的。
关于你提到的问题,您可以与扑杀脸玩:
meshView.setCullFace(CullFace.BACK);
或
meshView.setCullFace(CullFace.FRONT);
将改变绕组的三角形,影响你怎么看模型的顺序。默认为BACK。
我确实玩脸部剔除,但没有帮助,这就是为什么我张贴。将它放在BACK上效果最好。 – Scoopta
然后使用OBJImpoter验证您的代码是否生成相同的TrangleMesh –