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文件:

3DViewer

正如你所看到的,也有与OBJ文件没有问题。

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

其他进口商可在interactivemesh.org找到,但它不是开源的。

关于你提到的问题,您可以与扑杀脸玩:

meshView.setCullFace(CullFace.BACK); 

meshView.setCullFace(CullFace.FRONT); 

将改变绕组的三角形,影响你怎么看模型的顺序。默认为BACK。

+0

我确实玩脸部剔除,但没有帮助,这就是为什么我张贴。将它放在BACK上效果最好。 – Scoopta

+0

然后使用OBJImpoter验证您的代码是否生成相同的TrangleMesh –