Libgdx奇怪的建模 - 深度错误?

2022-09-04 21:55:56

当我使用ObjLoader加载任何.obj文件时,我得到了这个:

enter image description here

它的实际情况:

enter image description here

我如何加载它:

ModelInstance instance = new ModelInstance(model);
instance.transform.setToTranslation(-4, 0, 0);
instance.transform.mul(transform.setToRotation(Axis.X,(float)(Math.random()*360)));

然后在 onCreate() 中:

Gdx.gl.glClearDepthf(1.0f);
Gdx.gl.glEnable(GL20.GL_DEPTH_TEST);
Gdx.gl.glDepthFunc(GL20.GL_LESS);
Gdx.gl.glDepthRangef(0f, 1f);
Gdx.gl.glEnable(GL20.GL_TEXTURE_2D);

在 render() 中:

Gdx.gl.glViewport(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
Gdx.gl.glClearColor(.1f, .1f, .1f, 1f);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT);

shader.begin(camera, instances.get(i).transform);
modelBatch.begin(camera);

if (environment !=null) modelBatch.render(instances.get(i), environment, shader);
else modelBatch.render(instances.get(i), shader);

modelBatch.end();
shader.end();

干净的源代码在这里:

源代码

溶液:

1, probleme was with the .mtl file, copy pasted from the ship.mtl and rewrite
2, probleme was with the camera near, and far plane (0.1 and 1000 is the good)
3, probleme was with the obj file texture, because it flipped on the obj file, solution was to convert g3db with -f

答案 1

使用 libgdx 3D api(ModelBatch 和/或 Shader)时,不应在 Shader 类之外更改 opengl 状态。因此,启用/禁用深度测试等是无用的,可能会导致不可预测的行为。

不应使用 obj 文件。相反,请使用 fbx-conv 并使用 g3db 或 g3dj 文件格式。此外,您的模型缺少 mtl 文件,导致无法应用材料。

您正在使用自己的着色器,您不必调用shader.end(),modelbatch会为您执行此操作。

我尝试了您的模型(显然没有材质),它使用默认着色器正确渲染。


答案 2

看起来更像是你在这里的正常情况有一些问题。我不认为这是一个错误的深度问题。根据您的建模程序(例如blender3D),您可以尝试重新计算您的面部正态并再次导出!


推荐