gpt4 book ai didi

java - Android 使用 OpenGL-ES 中的 glBlendFunc 混合获得正确的不透明度/颜色

转载 作者:行者123 更新时间:2023-12-01 17:37:28 25 4
gpt4 key购买 nike

在我的程序中,我想在带纹理的背景上绘制一个正方形(具有不同的不透明度,为了论证起见,可以说是红色)。然而,根据背景,正方形显示出错误的颜色。当 alpha=1.0f(不透明)时,正方形应显示为红色,在黑色背景上显示为红色,但在白色背景上显示为白色(并在其间相应缩放)

在我的 GLActivity 中设置了以下标志:

gl.glDisable(GL10.GL_LIGHTING);
gl.glDisable(GL10.GL_CULL_FACE);
gl.glDisable(GL10.GL_DEPTH_BUFFER_BIT);
gl.glDisable(GL10.GL_DEPTH_TEST);
gl.glEnable(GL10.GL_DITHER);
gl.glShadeModel(GL10.GL_SMOOTH);
gl.glEnable(GL10.GL_BLEND);
gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE);

然后我绘制背景纹理:

gl.glClearColor(0.0f,0.0f,0.0f,1.0f);


gl.glBindTexture(GL10.GL_TEXTURE_2D, texturesFPS[1]);
gl.glEnable(GL10.GL_TEXTURE_2D);

gl.glPushMatrix();
gl.glTranslatef(imageOffSetX, 0, 0);
gl.glColor4f(1,1,1,1);
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);

gl.glVertexPointer(3, GL10.GL_FLOAT, 0,vertexBGBuffer);
gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, textureBGBuffer);
gl.glDrawElements(GL10.GL_TRIANGLES, indices.length,GL10.GL_UNSIGNED_SHORT, indexBuffer);

gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
gl.glDisable(GL10.GL_TEXTURE_2D);

然后我在背景图像上绘制一个正方形:

 gl.glPushMatrix();
gl.glTranslatef(x, y, 0);
gl.glColor4f(color[0], color[1], color[2], 1.0f); // Set to 1.0f temporarily
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer);
gl.glDrawElements(GL10.GL_TRIANGLES, indices.length, GL10.GL_UNSIGNED_SHORT, indexBuffer);
gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
gl.glPopMatrix();

我在 glBlendFunc 中尝试了不同的值,但无法理解如何实现我想要的。非常感谢任何帮助:)

最佳答案

我的答案可能会演变,但我确定的一件事是您应该使用以下混合函数...

gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);

关于java - Android 使用 OpenGL-ES 中的 glBlendFunc 混合获得正确的不透明度/颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4857720/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com