【发布时间】:2012-10-28 15:35:49
【问题描述】:
所以我的应用程序主要使用 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 纹理。
【问题讨论】:
-
您的假设是正确的,GL_ALPHA 映射到 RGBA 为 { R=0, G=0, B=0, A=A }
-
您使用的是桌面 OpenGL 还是 OpenGL ES?
-
.w 语义不正确。
标签: opengl-es opengl-es-2.0 glsl