考虑以下Alpha通道位图:
const int width = 4, height = 4;
var alpha = new byte[width * height] {
255, 255, 255, 255,
0, 127, 127, 0,
0, 127, 127, 0,
255, 255, 255, 255
};
我想将其加载到OpenGl并将其用于片段着色器,如下所示:
out vec4 color;
void main() {
float alpha = // Get pixel alpha like texture()
color = vec4(1, 0, 0, alpha);
}
我知道可以使用RGBA位图纹理,但是是否可以仅使用Alpha通道位图纹理? (来自最简单的byte[]
类型)
答案 0 :(得分:3)
您不需要使用Alpha通道位图,可以使用1通道位图纹理,如下所示:
glTexImage2D(GL_TEXTURE_2D, 0, GL_RED, width, height, 0, GL_RED, GL_UNSIGNED_BYTE, byteBuffer);
在GL_RED
中,我们的意思是我们只想要一个通道(红色)的纹理
因此,在片段着色器中,您可以执行
float alpha = texture(...).r;