【问题标题】:OpenGL Alpha channel details?OpenGL Alpha 通道细节?
【发布时间】:2014-01-18 21:14:32
【问题描述】:

我在 OpenGL 中编写了一个简单的 24 位位图加载器。我打开一个位图文件并读取它的像素,然后从中创建一个 RGB 像素数据数组,然后将其传递给 glDrawPixels()。

问题: 我需要使图像的某些像素透明,但我不确定 Alpha 通道是如何工作的。如果我想添加透明度,我不确定在 glDrawPixels 中为 formattype 传递什么类型的参数?我尝试创建一个带有 alpha 通道的位图文件,但是在查看文件内容后,第 4 字节(alpha)始终为零,并且图像本身也不透明。

这是我的 RGB 文件结构:

struct bmpRGB{
unsigned char R, G, B;
};

我需要添加什么才能包含 Alpha?使用 RGBA 时我应该将什么 type 参数传递给函数?我将在填充像素数组时自己添加 alpha 通道,但我需要知道所需的数据结构。

这就是我现在要做的:

glDrawPixels(bmp->Width, bmp->Height, GL_RGB,GL_UNSIGNED_BYTE, bmp->Data);

【问题讨论】:

    标签: c++ opengl bitmap alpha-transparency


    【解决方案1】:

    添加一个 alpha 组件并将format 设置为GL_RGBA

    struct bmpRGB
    {
        unsigned char R, G, B, A;
    };
    
    glDrawPixels(bmp->Width, bmp->Height, GL_RGBA, GL_UNSIGNED_BYTE, bmp->Data);
    

    确保启用并配置混合。

    【讨论】:

    • 是的,在对 Photoshop/十六进制编辑器进行了一些实验和一些猜测之后,我已经弄明白了,但还是谢谢。
    猜你喜欢
    • 2011-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多