2

所以我的应用程序主要使用 rgba 纹理进行渲染,但在少数情况下,我使用 alpha 蒙版来渲染文本。

我希望我的片段着色器的输出是给定坐标处纹理采样器的值乘以我传入的颜色均匀度。问题是我找不到处理这两种情况的简单解决方案。

所以对于 rgba 纹理,这给出了预期的结果:

gl_FragColor = texture2D(diffuseTexture, varTexcoord.st, 0.0) * color;

但是对于 alpha 纹理,输出总是黑色的。我假设纹理采样器将 alpha 纹理的每个像素视为:rgba(0, 0, 0, alpha),并且我希望它被视为 rgba(1, 1, 1, alpha)。我可以通过以下方式在 alpha 纹理上获得所需的结果:

gl_FragColor = texture2D(diffuseTexture, varTexcoord.st, 0.0).w * color;

但显然这会破坏 rgba 纹理。

我对 GLSL 还很陌生,我想知道是否有处理这两种情况的好方法,或者我是否必须拥有 2 个不同的着色器,或者将我所有的 aplha 纹理转换为 rgba。

编辑:

我想我最终会在加载资产时将我的 alpha 纹理重新打包为 GL_LUMINANCE_ALPHA 纹理。

4

1 回答 1

1

您有两种不同的方式来处理数据。所以你有两个不同的着色器。切换它们。着色器反映将要发生的事情。

如果您对 glTexEnv、照明等的每个设置使用旧的、已弃用的固定功能管道,则会在原位创建特定的着色器。

切换着色器就像调用 glUseProgramm 一样简单

于 2012-10-28T15:42:55.253 回答