2012-12-03 114 views
2

我試圖編寫繪製複雜非凸對象的程序。但我有問題 - 有些面孔似乎是透明的。我部分解決這個通過添加 GLES20.glEnable(GLES20.GL_CULL_FACE);Android OpenGL ES渲染不正確的對象

但之後,我發現它不起作用,如果有兩個面向法線方向相同,一個放在另一個後面。在這種情況下Open GL渲染不正確。 我也試過添加 GLES20.glEnable(GLES20.GL_DEPTH_TEST)

但我沒有達到目的。而且,一半的物體消失了。你能解釋我嗎,我錯在哪裏?

P.S.爲了獲得對象頂點,我使用了Blender(我將其數據導出到obj文件中)。我也檢查了這些數據 - 頂點的順序是正確的(CCW)。

+0

是否有任何地方,你可以上傳截圖?然後具有適當特權的人將能夠將其編輯爲您的問題。 – Tommy

回答

1

我面臨同樣的問題。問題是你沒有在configAttribslist中爲深度和模板分配緩衝區的大小。所以即使指定DepthTest,它也不計算深度。

解決方案:將以下行添加到eglChooseConfig attribs列表中。 EGL10.EGL_DEPTH_SIZE,8, EGL10.EGL_STENCIL_SIZE,8,這解決了我的問題。

代碼:

private static int[] s_configAttribs2 = { 
    EGL10.EGL_RED_SIZE, 4, 
    EGL10.EGL_GREEN_SIZE, 4, 
    EGL10.EGL_BLUE_SIZE, 4, 
    EGL10.EGL_DEPTH_SIZE, 8, 
    EGL10.EGL_STENCIL_SIZE, 8, 
    EGL10.EGL_SAMPLE_BUFFERS, 1, 
    EGL10.EGL_RENDERABLE_TYPE, 
    EGL_OPENGL_ES2_BIT, 
    EGL10.EGL_NONE 

}; 

egl.eglChooseConfig(display, s_configAttribs2, configs, numConfigs, num_config);