我無法在Android OpenGL ES 2.0上正確使用深度緩衝區。不管我做什麼,對象總是按照提供的順序渲染並完全忽略深度緩衝區。OpenGL ES深度緩衝區android,無法開始工作
從我讀過,默認的設置應該有一個深度緩衝,但我仍然嘗試,我能想到的每一個功能得到它的工作:
//setup
setEGLContextClientVersion(2);
setEGLConfigChooser(true);
GLES20.glEnable(GLES20.GL_DEPTH_TEST);
GLES20.glDepthFunc(GLES20.GL_LEQUAL);
GLES20.glDepthMask(true);
//render
GLES20.glClearColor(0.8f, 0.5f, 0.8f, 1.0f);
GLES20.glClearDepthf(1.0f);
GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT | GLES20.GL_DEPTH_BUFFER_BIT);
我的配售對象在0.5 ,在z軸上爲0.0,-0.5。我可以驗證這是有效的,因爲如果我使用透視視圖,它將正確地改變對象的大小(較小的對象) - 我的頂點着色器除了應用視圖矩陣外什麼也不做。如果我是正確的,我不能在ES中改變片段着色器的深度,這樣就不會出錯。
我很難過。我真的不知道我還能檢查什麼。我所做的每一項搜索(在網上或在這裏)都給出了似乎無法解決問題的答案(儘管它表明人們出於其他原因而出現了問題)。 ES 2.0中的大多數示例實際上沒有足夠的對象來測試深度緩衝區,所以我不能確定示例代碼是正確的。
要評論:只需要打一個電話後,我的「設置」部分叫「超級」我的派生GLSurfaceView內,設置渲染之前。 「render」部分在我的渲染器「onDrawFrame」中首先被調用。
你是否在創建GLSurfaceView後立即調用GLES20方法? – harism 2012-08-08 14:48:59
我澄清了我稱之爲這些功能的地方。 – 2012-08-08 14:51:30
在這種情況下,您可以嘗試在渲染代碼中移動所有GLES20調用。 – harism 2012-08-08 14:52:50