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

时间:2017-06-20 06:02:30

标签: java opengl lwjgl

对于这个项目,我正在使用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图像,现在可以使用建议的更改正确渲染。

1 个答案:

答案 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