2013-03-09 46 views
0



這是使用Android平臺上OpenGLES2.0(對API 8,如果這有什麼差別)開發的移動應用程序。

我試圖在我目前的工作渲染系統添加一個UI層,但它不工作,我不知道爲什麼。任何幫助將不勝感激。

以下是我在做什麼:
1)當初始化時,我加載了一堆整個網格物體來顯示,這些網格物體使用各種程序進行渲染。其中一個網格顯示一個紋理,這是工作。
2)I已經加載全部網格後,我加載「按鈕」,其爲基本上與已經在被上述(1)通過它拉伸中使用的相同的紋理的正方形。
3)我的主渲染循環使得深度掩模可寫,並且對於依次在每個程序,使得任何其是不透明的,則使得所述深度掩模只讀,並且對於依次在每個程序,使得任何具有任何程度透明度,然後清除深度緩衝位並依次渲染每個UI組件。

我做一兩件事,但這可能不是做事的正確方法 - 這是我的渲染UI組件不執行任何模型 - 視圖 - 投影變換程序 - 我通過標準化設備座標進去直接和它只是一個通過。據我所知,這應該起作用 - 我只是提到它,因爲我懷疑它。是用於頂點和片段着色器用於UI組件程序代碼,如下所示:
int vShader = compileShader(GLES20.GL_VERTEX_SHADER,
"attribute vec4 aPosition;" +
"attribute vec2 aTexCoord;" +
"varying vec2 vTexCoord;" +
"void main() {" +
" vTexCoord = aTexCoord;" +
" gl_Position = aPosition;" +
"}");
int fShader = compileShader(GLES20.GL_FRAGMENT_SHADER,
"precision mediump float;" +
"uniform sampler2D uTexture;" +
"varying vec2 vTexCoord;" +
"void main() {" +
" gl_FragColor = texture2D(uTexture,vTexCoord);" +
"}");
OpenGLES2未能呈現位圖


這是我已經試過:
1)我已經試過防止不透明和透明的程序運行。在這種情況下我得到完全充滿垃圾的畫面(帶狀規則間隔開的橫條紋,純黑和看似隨機的東西之間交替 - 每個頻帶可能是約50個像素高)。
2)我已經檢查了float數組的內容上我FloatBuffer基於(我不能工作,如何直接檢查FloatBuffer。這一切對我來說很好。

我有點位難倒!任何人有什麼想法?

回答

0

OK,我得到了這條底線。我會列出一般的東西先檢查的情況下,沒有人結束了在這裏,我的傷害是那麼到底是什麼。

一般情況下:
1)如果你沒有看到東西,關閉剔除臉(glDisable(GL_CULL_FACE));這樣,如果你錯誤地掌握了你的多邊形的手型,你仍然會看到一些東西。
2)注意OpenGL的0,0是左下角,但你可能已經決定0,0是你的UI代碼的左上角(這可以幫助和幫助你給三角形賦予不正確的手型) 。點13​​顯示如何避免這種情況。
3)如果屏幕上出現垃圾,您可能已經忘記清除緩衝區。所以,具體來說,我有一些錯誤的三角形(由於我的UI代碼和OpenGL代碼中的起源之間的不匹配),並且,當開始修剪東西回到調試基礎時,已經意外地註釋掉glClear調用。

關於是否有可能沒有做orthoganal碼矩陣變換,我覺得這是應該的,但不能報到;把東西迴歸到基本意味着代碼去了,一旦我找到了它,我肯定不會放棄它!