c++ - OpenGL Alpha channel 细节?

标签 c++ opengl bitmap alpha-transparency

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

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

这是我的 RGB 文件结构:

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

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

这就是我现在所做的:

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

最佳答案

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

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

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

确保启用和配置混合。

关于c++ - OpenGL Alpha channel 细节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20865738/

相关文章:

Android 图片下载器问题

c++ - 通过隐藏/取消隐藏代码行避免编写两个版本的函数

c++ - 在 mathops.h 中的 VS2005 汇编代码中的 ffmpeg 编译不编译

c++ - 无法理解编译器在复制构造函数上引发的错误消息

c++ - 追踪 WinSock MFC 应用程序中句柄泄漏的来源

c++ - 将物体固定到相机上的问题

c# - 如何知道谁在处置我的 Bitmap 对象或处置了它?

c++ - OpenGL 中的乱序 Z 缓冲区

python - 如何在 QGLWidget 中使用 glutInitDisplayMode() 来获得抗锯齿功能?

c++ - 如何比 SetPixel() 更快地直接从原始 RGB 值数组在屏幕上显示像素?