gpt4 book ai didi

android - Opengl-使用着色器,有必要吗?

转载 作者:行者123 更新时间:2023-11-29 01:29:14 25 4
gpt4 key购买 nike

在我的 Android 游戏中,我使用以下代码绘制了一个矩形并将纹理绑定(bind)到它:

        gl.glVertexPointer(3, GLES10.GL_FLOAT, 0, mBufVertices);
// Enable color array.
gl.glEnableClientState(GLES10.GL_COLOR_ARRAY);
gl.glColorPointer(4, GLES10.GL_FLOAT, 0, mBufColors);
gl.glEnable(GL10.GL_BLEND);
gl.glEnable(GL10.GL_TEXTURE_2D);
gl.glBindTexture(GL10.GL_TEXTURE_2D, renderTex[1]);
gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);
gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, mVerticesCountFront);
gl.glDisable(GL10.GL_BLEND);
gl.glDisable(GL10.GL_TEXTURE_2D);

一切都很好,但问题是我希望矩形是完全透明的并且只在其上绘制可见的纹理,这意味着我希望黄色部分是透明的:

enter image description here

我尝试更改矩形顶点颜色并使它们透明,但这使整个页面甚至纹理都变得透明。

我必须使用着色器来做我想做的事吗?

最佳答案

这是使用混合函数的一个非常常见的错误。发生的情况是您同时用 .0 覆盖了 alpha channel ,即使颜色分量从背景中保留下来也是如此。

您需要做的是使用 glBlendFuncSeparate,您可以使用 (..., ..., GL_ZERO, GL_ONE) 来保留目标 alpha 值.或者您可以简单地使用颜色掩码 glColorMask 禁用绘图到 alpha channel ,其中最后一个参数为 false,其余参数为 true(默认情况下均为 true)。

无论如何不要忘记在使用完后重置值。

关于android - Opengl-使用着色器,有必要吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32221094/

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