我正在学习如何使用libGdx渲染对象。我有一个方形模型,从它们创建一些模型实例。如果我只有一个模型,那就很好。
但是如果我有更多的实例,它就不合适。看起来前面的对象是先绘制的,而背景是最后一个,所以始终可以看到背景对象,并且可以通过它们看到前面的对象。
要渲染我使用以下
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
答案 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) ;
如果你还没有完成,会有所帮助。此外,启用深度缓冲区仅在您实际拥有深度缓冲区时才有效,这意味着您必须确保拥有深度缓冲区,并且此方法取决于您的窗口上下文。