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

时间:2013-12-07 14:32:00

标签: java android libgdx

当我使用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();

在这里清理源代码:

source code

SOLUTION:

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

3 个答案:

答案 0 :(得分:9)

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

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

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

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

答案 1 :(得分:1)

在这里看起来更像你的常规问题。我不认为这是一个错误的深度问题。取决于您的建模程序,例如blender3D,您可以尝试重新计算正常情况并再次导出!

答案 2 :(得分:1)

您可以在3D Studio Max上执行以下步骤:

  1. 使用CTRL + A选择所有设计(如果使用Windows)
  2. 按ALT + G选择编辑和工具选择
  3. 附近的组类别
  4. 让您的所有工作成为一个小组
  5. 再次尝试使用Android应用程序。
  6. 应该这样做。