android - OpenGL 混合模式和深度缓冲区

标签 android opengl-es

阅读圈离观众更近,纹理有透明背景。

(两个对象都是大小相同的正方形,只是纹理和 x、z 坐标不同)。

我要:

enter image description here

但是我有:

enter image description here

我知道我必须对混合模式和深度缓冲区做一些事情,但我不知 Prop 体是什么。有人可以帮助我吗?

当前加载纹理的代码:

public void initTexture(GL10 gl, Bitmap bitmap) {
    gl.glEnable(GL10.GL_BLEND);
    gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);

    int[] texture = new int[1];
    gl.glGenTextures(1, texture, 0);

    textureId = texture[0];
    gl.glBindTexture(GL10.GL_TEXTURE_2D, textureId);

    gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_NEAREST);
    gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);

    gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S, GL10.GL_REPEAT);
    gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T, GL10.GL_REPEAT);

    GLUtils.texImage2D(GLES10.GL_TEXTURE_2D, 0, bitmap, 0);
    bitmap.recycle();
}

绘图的相关部分,对于这些对象中的每一个:

    gl.glBindTexture(GL10.GL_TEXTURE_2D, textureId);

    gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
    gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);

    gl.glFrontFace(GL10.GL_CW);

    gl.glVertexPointer(3, GL10.GL_FLOAT, 0, verticesBuffer);
    gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, textureBuffer);

    gl.glDrawElements(GLES20.GL_TRIANGLES, indices.length,  GLES10.GL_UNSIGNED_SHORT, indicesBuffer);

谢谢!

注意:我使用的是 OpenGL ES 1。

最佳答案

您不需要混合,因为那样会混合颜色。你想要的是alphatesting。使用 glEnable(GL_ALPHA_TEST)glAlphaFunc 适本地设置它。

关于android - OpenGL 混合模式和深度缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15190113/

相关文章:

java - 未找到 Gradle DSL 方法 : 'ooapply()'

c - OpenGL工作着色器?

java - 与 Android 中的 GLThread 同步

android - 如何在 OpenGL ES 1.1 中处理索引缓冲区

c++ - OpenGL ES 2 如何渲染到纹理和提取数据用于 GPGPU 测试

android - 在位图上绘图?

javascript - 无法在 iPhone 应用程序上使用 PhoneGap 和 javascript 获取 JSON 结果,但在使用相同代码的 Android 应用程序上获取结果

android - apk文件名更改

android - 如何在带有广播接收器的 HTC 手机中检测耳机按钮双击?

java - Android Opengl es 1 - asynctask 在某些设备上导致奇怪的行为