加载和使用 Alpha 通道位图

Posted

技术标签:

【中文标题】加载和使用 Alpha 通道位图【英文标题】:Load and use alpha channel bitmap 【发布时间】:2019-06-05 14:08:18 【问题描述】:

考虑以下 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[] 类型)

【问题讨论】:

【参考方案1】:

您不需要使用 Alpha 通道位图,您可以使用 1 通道位图纹理,如下所示:

glTexImage2D(GL_TEXTURE_2D, 0, GL_RED, width, height, 0, GL_RED, GL_UNSIGNED_BYTE, byteBuffer);

这里GL_RED 是说我们只想要一个具有一个通道的纹理(红色) 所以在片段着色器中你可以做 float alpha = texture(...).r;

【讨论】:

非常感谢!我正在尝试 别担心!如果您需要进一步解释,请告诉我。 @Rabbid76 是的,我已纠正,我对答案进行了必要的更改。谢谢!

以上是关于加载和使用 Alpha 通道位图的主要内容,如果未能解决你的问题,请参考以下文章

在 Win32 中显示带 alpha 通道的 32 位图像

图像格式中的Alpha通道是指啥?

ALPHA通道如何给图像添加阴影效果??

在 C# 中使用本机 HBitmap,同时保留 Alpha 通道/透明度

Python PIL 完全删除每个 alpha 通道

请使用CGBitmapContext和16位图像帮助