渲染多个3D对象

时间:2016-04-15 13:14:35

标签: opengl 3d libgdx render

我正在学习如何使用libGdx渲染对象。我有一个方形模型,从它们创建一些模型实例。如果我只有一个模型,那就很好。 enter image description here

但是如果我有更多的实例,它就不合适。看起来前面的对象是先绘制的,而背景是最后一个,所以始终可以看到背景对象,并且可以通过它们看到前面的对象。 enter image description here

要渲染我使用以下

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

    mb.begin(cam);
    worldManager.render(mb, environment);
    mb.end();

mb变量是ModelBatch实例,而在worldManager.render中,每个模型实例的绘制如下:

mb.render(model, environment);

我不确定发生了什么。但我认为这是我需要启用的GL属性

与以下post不是100%相关,因为它是使用像libgdx这样的OPENGL,但是该帖子中提供的解决方案无效,我认为问题来自libgdx的ModelBatch

Reproduction of the problem

2 个答案:

答案 0 :(得分:3)

您没有正确设置相机。首先,你的相机的近平面是0f,这意味着它是无限小的。将其设置为至少1f的值。其次你设置相机看它自己的位置,这是不可能的(你不能看到你自己的眼睛,你可以;)。)。

所以它看起来像:

camera = new PerspectiveCamera(90, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
camera.position.set(0, 10, 0);
camera.lookAt(0,0,0);
camera.near = 1f;
camera.far = 100f;
camera.update();

您可能想从这里开始:https://xoppa.github.io/blog/basic-3d-using-libgdx/

有关相机如何工作的更多信息,请查看:http://www.badlogicgames.com/wordpress/?p=1550

顺便说一下,调用Gdx.gl20.glEnable(GL20.GL_DEPTH_TEST);在该位置无效,在与ModelBatch混合时绝对不应该这样做。 ModelBatch管理自己的渲染上下文,有关详细信息,请参阅文档:https://github.com/libgdx/libgdx/wiki/ModelBatch

答案 1 :(得分:1)

有很多可能的答案,但我会说

glEnable (GL_DEPTH_TEST) ; 
如果你还没有完成,

会有所帮助。此外,启用深度缓冲区仅在您实际拥有深度缓冲区时才有效,这意味着您必须确保拥有深度缓冲区,并且此方法取决于您的窗口上下文。