libGdx - 尝试使用libgdx.g3d加载obj模型时出现黑屏

时间:2014-02-07 09:03:29

标签: java android eclipse opengl-es libgdx

在尝试使用libgdx加载和渲染.obj模型时,我只得到黑屏。 我尝试过不同的模型(使用.obj格式的blender导出)我尝试加载.g3db文件而不是obj文件,并得出相同的结果。什么都没有呈现在屏幕上,但我的glClearColor(是的我尝试了除了黑色以外的其他东西,看看我的模型是否呈现纯黑色)我已经为.obj文件正确加载了所有资源(skeleton.mtl,skeleton.obj,texture。 png)而且我确定我的代码正在对它们做些什么,因为如果我删除say,texture.png,我会收到错误,说它无法找到资产。那么为什么我在渲染时会得到什么呢?我想了解为什么会这样。这是我的代码:

    public void show() {
    modelBatch = new ModelBatch();
    environment = new Environment();
    environment.set(new ColorAttribute(ColorAttribute.AmbientLight, 0.4f, 0.4f, 0.4f, 1f));
    environment.add(new DirectionalLight().set(0.8f, 0.8f, 0.8f, -1f, -0.8f, -0.2f));

    cam = new PerspectiveCamera(67, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
    cam.position.set(1f, 1f, 1f);
    cam.lookAt(0,0,0);
    cam.near = 0.1f;
    cam.far = 300f;
    cam.update();
    ModelLoader loader = new ObjLoader();
    model = loader.loadModel(Gdx.files.internal("models/skeleton.obj"));
    instance = new ModelInstance(model);

    camController = new CameraInputController(cam);
    Gdx.input.setInputProcessor(camController);

    ModelLoader loader = new ObjLoader();
    model = loader.loadModel(Gdx.files.internal("models/skeleton.obj"));
    instance = new ModelInstance(model);

    camController = new CameraInputController(cam);
    Gdx.input.setInputProcessor(camController);

然后我的渲染循环:

@Override
    public void render(float delta) {
    Gdx.gl.glClearColor(0, 0, 0, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
    Gdx.gl.glViewport(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());

    camController.update();

    modelBatch.begin(cam);
    modelBatch.render(instance, environment);
    modelBatch.end();
}

2 个答案:

答案 0 :(得分:1)

我忘了清除我的深度缓冲区。

在我的:

public void render(float delta) {

我改变了这个:

Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

到这个

Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT);

如果你使用的是GL10,它会是这样的:

Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);

我知道这是愚蠢的事。我还做了另一张海报建议的变化,关于确保我的透明度在搅拌机中设置在零以上,并且因为相机距离太近而无法渲染任何东西。谢谢。

答案 1 :(得分:0)

cam.position.set(1f, 1f, 1f);
cam.lookAt(0,0,0);
cam.near = 0.1f;

您的相机靠近原点,因此您的物体可能太大而相机可能在“内部”,所以它不会被渲染。

另外,您可能导出了不透明度为0的对象: https://github.com/libgdx/libgdx/wiki/Importing-Blender-models-in-LibGDX#wiki-troubleshooting-missing-textures

  

此外,Blender导出的材质很常见,不透明度设置为零。如果您注意到您的模型未被渲染。转到Blender中的Material,在“Transparency”下面将Alpha设置为所需的Alpha(通常为1,完全不透明)。