2016-04-15 88 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); –