2016-04-15 87 views
1

我在学习如何使用libGdx呈现对象。我有一个正方形模型,它从它们创建了一些模型实例。如果我只有一个模型,它渲染罚款。 enter image description here呈现多个3D对象

但是,如果我有更多的实例它不正确。看起来前面的物体是先画的,背景是最后一个,所以总是背景物体是可见的,前面的物体可以通过它们看到。 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%相关,因为它是使用OPENGL像libgdx,但该帖子中提供的解决方案不起作用,我认为问题出现从ModelBatch从libgdx

Reproduction of the problem

+3

这可能是'glEnable(GL_DEPTH_TEST)'?它也可能是你启用了它,但没有创建深度缓冲区,并且一切正常,因为你没有启用 – Guiroux

+1

[OpenGL ES 2.0使用LibGDX以相反的深度顺序显示对象的可能的重复](http:// stackoverflow.com/questions/25070612/opengl-es-2-0-displaying-objects-in-opposite-depth-order-using-libgdx) – Guiroux

+0

我标记为重复的,因为它是使用libgdx的opengl,并且您遇到了同样的问题,所以也许接受的答案会帮助你 – Guiroux

回答

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

+0

感谢问题出现在相机上。是的,我知道modelbatch有他自己的渲染上下文,这就是为什么认为问题在那里,我尝试在modelbatch上下文中启用depth_test。但问题在于相机。谢谢! –

1

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

glEnable (GL_DEPTH_TEST) ; 

可以帮助,如果你还没有做呢。另外,如果您实际具有深度缓冲区,则启用深度缓冲区才有效,这意味着您必须确保有一个深度缓冲区,并且此方法取决于您的窗口上下文。

+0

我启用该行,仍然无法正常工作。我认为问题出自libgx的ModelBatch。此外,我把这一行,并仍然不工作batch.getRenderContext()。setDepthTest(GL20.GL_DEPTH_BITS); –