我已经将一张带有不同透明度的RGBA格式纹理加载到内存中。
图片的加载方式如下:
GLuint texture = 0;
glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, texture);
self.texNum = texture;
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, self.imageWidth, self.imageHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, [self.imageData bytes]);
我想知道如何绘制这个纹理,使得图像中的 alpha 通道被视为全为1,并且该纹理像 RGB 图像一样绘制。
考虑基础图像: http://www.ldeo.columbia.edu/~jcoplan/alpha/base.png
这个图像从0到255的alpha值呈现出渐变效果,而RGB值始终为255,0,0。
然而,如果我禁用混合将其绘制出来,我会得到一个像这样的图像: www.ldeo.columbia.edu/~jcoplan/alpha/no_alpha.png
而我真正想要的是这样的图像: www.ldeo.columbia.edu/~jcoplan/alpha/correct.png
我很感激有关忽略 alpha 通道的指点。请注意,我不能仅最初将图像加载为 RGB,因为我在其他时间需要 alpha 通道。
编辑:我尝试使用 GL_COMBINE 来解决我的问题,如下所示:
glColorf(1,1,1,1);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE);
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_REPLACE);
glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_RGB, GL_TEXTURE);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR);
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA, GL_REPLACE);
glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_ALPHA, GL_PRIMARY_COLOR);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA, GL_SRC_ALPHA);
[self drawTexture];
但是仍然没有运气,它仍然将黑色绘制为红色。