gpt4 book ai didi

java - 如何去除纹理后面的不透明四边形? (lwjgl)

转载 作者:行者123 更新时间:2023-11-30 02:29:19 25 4
gpt4 key购买 nike

对于这个项目,我使用 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);
}

我知道背景四边形是白色的,因为我默认将颜色绑定(bind)为白色,因为我发现绑定(bind)任何其他颜色都会弄乱其他纹理上的颜色。

编辑:感谢您的回复。 ybungalobill 让我走上了正轨。我最终将纹理保存为 32 位未压缩的 TGA 图像,现在可以根据建议的更改正确渲染。

最佳答案

默认混合方程为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

关于java - 如何去除纹理后面的不透明四边形? (lwjgl),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44644986/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com