手动添加Alpha通道时,纹理在opengl中变为灰色

时间:2015-11-05 11:56:40

标签: opengl textures transparent alpha texture-mapping

int j,k,t3,t4;
for (int i = 0;i < width;i++)
    for (j = 0;j < height;j++)
    {
        t3 = (i*height + j)*3 ;
        t4 = (i*height + j) * 4;
        for (k = 0;k < 3;k++)
            texture[t4+k] = data[t3+k];
        texture[t4 + 3] = (data[t3 + 1]==255 && data[t3 + 2]==255 && data[t3]==255) ? 0 : 255;
    }


GLuint textureID;
glGenTextures(1, &textureID);

glBindTexture(GL_TEXTURE_2D, textureID);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, width, height, 0, GL_BGRA, GL_UNSIGNED_BYTE, texture);

它是一个Bitmap文件,我用原始数据成功加载了它。

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_BGR, GL_UNSIGNED_BYTE, data);

但是当我手动添加Alpha通道时,纹理会丢失其颜色。图片附在下面。 After modification on texture data. Before Transparency is added.

1 个答案:

答案 0 :(得分:1)

我无法完全解释确切的症状,但代码中的索引算法会显示:

for (int i = 0;i < width;i++)
    for (j = 0;j < height;j++)
    {
        t3 = (i*height + j)*3 ;
        t4 = (i*height + j) * 4;

由于图像通常逐行布局在内存中,因此迭代行中像素的索引应该是没有乘数的加法,而另一个索引乘以width(不是{{ 1}})。这应该是:

height