当我使用ObjLoader加载任何.obj文件时,我得到了这个:
真实的样子:
我如何加载它:
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();
在这里清理源代码:
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
答案 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上执行以下步骤:
应该这样做。