这是在 android 平台上使用 OpenGLES2.0 开发移动应用程序(针对 API 8,如果有任何区别)。
我正在尝试在我当前工作的渲染系统上添加一个 UI 层,但它不起作用,我不知道为什么。任何帮助将不胜感激。
这就是我正在做的事情:
1)初始化时,我正在加载一整堆要显示的网格,这些网格使用各种程序进行渲染。其中一个网格显示纹理,这是有效的。
2) 在我加载了所有网格之后,我加载了一个“按钮”,它基本上是一个正方形,具有相同的纹理,已经在上面的 (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);" +
"}");
这是我尝试过的:
1)我尝试过阻止不透明和透明的程序运行。在这种情况下,我得到一个完全充满垃圾的屏幕(带状规则间隔的水平条纹,在纯黑色和看似随机的东西之间交替 - 每个带可能大约 50 像素高)。
2)我检查了我FloatBuffer
所基于的浮点数组的内容(我不知道如何FloatBuffer
直接检查。这对我来说看起来不错。
我有点难过!有人有什么想法吗?