对于这个项目,我正在使用LWJGL和Slick-Utils。
我试图渲染一个小的激光纹理,明亮的中心和边缘周围的褪色透明红色。当我在黑色背景下渲染它时,它背后有一个坚固/不透明的白色四边形。我知道四边形是因为我使用GL_QUADS来渲染纹理,但无论我在哪里,我似乎无法找到如何使四边形不渲染,只是让激光显示出来
以下是我用来渲染四边形和纹理的代码:
public static void drawImage(Texture texture, float x, float y, float width,
float height) {
glEnable(GL_TEXTURE_2D);
glEnable(GL_BLEND);
texture.bind();
glTranslatef(x + width / 2, y + height / 2, 0);
glBegin(GL_QUADS);
glTexCoord2f(0, 0);
glVertex2f(-width / 2, -height / 2);
glTexCoord2f(texture.getWidth(), 0);
glVertex2f(width / 2, -height / 2);
glTexCoord2f(texture.getWidth(), texture.getHeight());
glVertex2f(width / 2, height / 2);
glTexCoord2f(0, texture.getHeight());
glVertex2f(-width / 2, height / 2);
glEnd();
glLoadIdentity();
glDisable(GL_TEXTURE_2D);
glDisable(GL_BLEND);
}
我知道背景四边形是白色的,因为我默认将颜色设置为白色,因为我发现绑定任何其他颜色都会混淆我其他纹理上的颜色。
编辑:感谢您的回复。 ybungalobill让我走上正轨。我最终将纹理保存为32位未压缩的TGA图像,现在可以使用建议的更改正确渲染。
答案 0 :(得分:2)
默认的混合等式为GL_ONE, GL_ZERO
。你必须正确设置它。判断你看到一个白色四边形'后面',我怀疑你加载一个非预乘的alpha PNG并用默认的混合方程渲染它。而是按照以下步骤进行正确的添加剂混合(你需要添加剂,因为激光是光):
glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE, GL_ZERO, GL_ONE);
//glBlendFunc(GL_SRC_ALPHA, GL_ONE); // if you don't care about destination alpha channel