我正在编写一段简单的代码,在绿色背景上显示一个透明背景的精灵。现在我的精灵有问题,它有一个彩色背景(我可以改变颜色,所以它不是错误),而我的主背景上应该没有任何背景!
在我看来,问题在于,当纹理映射到彩色四边形时,所有 alpha 值都设置为与四边形颜色值相同,因为:
- PNG图像很好并且具有透明背景
- 我用 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 没有混合
带有混合的 GL_MODULATE 的图像: 带有混合的 GL_MODULATE