簡體   English   中英

渲染多個 3D 對象

[英]Rendering multiple 3D Objects

我正在學習如何使用 libGdx 渲染對象。我有一個正方形 model,它從中創建了一些 model 實例。 如果我只有一個 model,它就可以正常顯示。 在此處輸入圖像描述

但是,如果我有更多實例,它就不正確了。 看起來前面的物體是先畫的,背景是最后畫的,所以背景物體總是可見的,你可以透過它們看到前面的物體。 在此處輸入圖像描述

為了呈現我使用以下

    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 中每個 model 實例繪制如下:

mb.render(model, environment);

我不確定發生了什么。 但我認為這是我需要啟用的一些 GL 屬性

不是 100% 與以下帖子相關,因為,是的,它像 libgdx 一樣使用 OPENGL,但該帖子中提供的解決方案不起作用,我認為問題來自 libgdx 的 ModelBatch

問題重現

您沒有正確設置相機。 首先,相機的近平面為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

有很多可能的答案,但我會說

glEnable (GL_DEPTH_TEST) ; 

如果您還沒有做的話可以提供幫助。 另外,只有在您確實有一個深度緩沖區時,才啟用深度緩沖區,這意味着您必須確保擁有一個深度緩沖區,並且此方法取決於窗口上下文。

為了顯示不同的維度,你可以使用霧

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM