我正在编写简单的代码片段,在绿色背景上显示带有透明背景的精灵。现在我的精灵有问题,它有一个彩色背景(我可以更改颜色,所以它不是错误),而它应该在我的主背景上没有任何背景出现!
在我看来,问题是当纹理被映射到彩色四边形时,所有的alpha值都设置为与四色值相同,因为:
这里我的纹理和混合代码:
//Texture Configuration
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glGenTextures(10, texNo);
glBindTexture(GL_TEXTURE_2D, texNo[0]);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL );
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
glEnable(GL_TEXTURE_2D);
sfTexture[0].loadFromFile("image.png");
sf::Texture::bind(&sfTexture[0]);
//Blending
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
和我的绘图代码:
glBegin(GL_QUADS);
glColor3f(0,1,0);
glVertex2d(0,0);
glVertex2d(220,0);
glVertex2d(220,300);
glVertex2d(0,300);
glColor4f(1, 0, 0, 1);
glBindTexture(GL_TEXTURE_2D, texNo[0]);
glTexCoord2f(0,1); glVertex2d(xpos+0,ypos+0);
glTexCoord2f(1,1); glVertex2d(xpos+30,ypos+0);
glTexCoord2f(1,0); glVertex2d(xpos+30,ypos+30);
glTexCoord2f(0,0); glVertex2d(xpos+0,ypos+30);
//glDisable(GL_BLEND);
glEnd();
更新:我尝试了GL_MODULATE而不是GL_DECAL
没有混合的GL_MODULATE图片: GL_MODULATE without blending
带有混合的GL_MODULATE的图像: GL_MODULATE with blending
答案 0 :(得分:0)
PeterT在评论中说: 将颜色设置为(1,1,1,1)并使用默认的GL_MODULATE会更容易。问题是,如果使用GL_DECAL,则输出片段使用alpha与多边形的glColor混合并写入glColor4f中给出的alpha。 此外,您只能在glBegin()和glEnd之间使用某些命令,因此只使用glTexCoord glColor glVertex和其他类似命令。因此,使用一个glBegin()/ glEnd()组合作为背景,然后更改设置,然后使用另一个glBegin()/ glEnd()来绘制精灵。