如何摆脱纹理后面的不透明四边形? (lwjgl)

How do I get rid of the opaque quad behind my texture? (lwjgl)

对于这个项目,我将 LWJGL 与 Slick-Utils 一起使用。

我正在尝试渲染激光的小纹理,其中心明亮,边缘周围逐渐褪色的透明红色。当我在黑色背景下渲染它时,它后面有一个 solid/opaque 白色四边形。我知道四边形在那里,因为我正在使用 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 图像,现在它可以根据建议的更改正确渲染。

默认的混合方程是GL_ONE, GL_ZERO。你必须正确设置它。从你看到一个白色四边形 'behind' 来判断,我怀疑你加载了一个非预乘 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