簡體   English   中英

Android OpenGL ES 2.0 multible對象

[英]Android OpenGL ES 2.0 multible objects

我們將Opengl ES 2.0用於Android,並嘗試顯示彼此堆疊的兩個多維數據集。 為此,我們有兩個頂點緩沖區(mCubePositions1和mCubePositions2),它們存儲Cubedata(組合成三角形的頂點)並為它們中的每一個調用單獨的繪制方法:

    GLES20.glVertexAttribPointer(mPositionHandle, mPositionDataSize, GLES20.GL_FLOAT, false,0, mCubePositions1); //the second time mCubePositions2
    GLES20.glEnableVertexAttribArray(mPositionHandle);
    //some Code concerning lightning and textures
    GLES20.glDrawArrays(GLES20.GL_TRIANGLES, 0, 36);

結果是顯示了兩個多維數據集,但是如果我們讓它們旋轉,則第二個繪制的多維數據集將始終顯示在頂部(第二個多維數據集從第一個多維數據集開始閃爍)。 在onSurfaceCreated方法中,我們初始化深度緩沖區:

    // Set the background clear color to black.
    GLES20.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
    GLES20.glClearDepthf(1.0f);
    // Use culling to remove back faces.
    GLES20.glEnable(GLES20.GL_CULL_FACE);
    // Enable depth testing
    GLES20.glEnable(GLES20.GL_DEPTH_TEST);
    GLES20.glDepthFunc(GLES20.GL_LEQUAL);
    GLES20.glDepthMask(true);

有一種解決方案將兩個緩沖區組合為一個,而不是僅調用一個繪制方法,但這對我們來說不是解決方案,因為我們想單獨移動多維數據集。

如果這不是答案,請要求更多。

謝謝你的每一個回答:)

如果啟用深度測試,但仍然無法正常工作,則通常意味着您沒有深度緩沖區。

在Android中使用GLSurfaceView時,您可以通過調用setEGLConfigChooser方法來請求在初始化視圖時需要哪些緩沖區。 此方法有一些重載。 最常用的一個為每個緩沖區取一個大小(位數)。 一個典型的呼叫將如下所示:

setEGLConfigChooser(8, 8, 8, 0, 16, 0);

這意味着您需要每個8位用於RGB,不需要alpha,需要16位深度緩沖區以及不需要模板。

請注意,不能保證您將獲得完全指定的大小,但是可以在可用配置中獲得最佳匹配。

暫無
暫無

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

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