[英]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.