阅读圈离观众更近,纹理有透明背景。
(两个对象都是大小相同的正方形,只是纹理和 x、z 坐标不同)。
我要:
但是我有:
我知道我必须对混合模式和深度缓冲区做一些事情,但我不知 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/