gpt4 book ai didi

java - LWJGL png纹理透明度(textureColour.a白色而不是黑色)

转载 作者:行者123 更新时间:2023-11-30 03:14:19 24 4
gpt4 key购买 nike

我有由 PNG 图片纹理化的草模型。我得到白色背景颜色而不是黑色,这是我想要的。为什么会这样?我应该做什么来解决这个问题?我正在使用 LWJGL 3PNGDecoder.jar

纹理加载器代码:

public int loadTexture(String fileName) {
ByteBuffer buf = null;
int tWidth = 0;
int tHeight = 0;

try {
// Open the PNG file as an InputStream
InputStream in = new FileInputStream("res/" + fileName + ".png");
// Link the PNG decoder to this stream
PNGDecoder decoder = new PNGDecoder(in);

// Get the width and height of the texture
tWidth = decoder.getWidth();
tHeight = decoder.getHeight();

// Decode the PNG file in a ByteBuffer
buf = ByteBuffer.allocateDirect(
4 * decoder.getWidth() * decoder.getHeight());
decoder.decode(buf, decoder.getWidth() * 4, Format.RGBA);
buf.flip();

in.close();
} catch (IOException e) {
e.printStackTrace();
System.exit(-1);
}

// Create a new texture object in memory and bind it
int textureId = GL11.glGenTextures();
GL13.glActiveTexture(textureId);
GL11.glBindTexture(GL11.GL_TEXTURE_2D, textureId);

// All RGB bytes are aligned to each other and each component is 1 byte
GL11.glPixelStorei(GL11.GL_UNPACK_ALIGNMENT, 1);

// Upload the texture data and generate mip maps (for scaling)
GL11.glTexImage2D(GL11.GL_TEXTURE_2D, 0, GL11.GL_RGB, tWidth, tHeight, 0,
GL11.GL_RGBA, GL11.GL_UNSIGNED_BYTE, buf);
GL30.glGenerateMipmap(GL11.GL_TEXTURE_2D);

// Setup the ST coordinate system
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_S, GL11.GL_REPEAT);
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T, GL11.GL_REPEAT);

// Setup what to do when the texture has to be scaled
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER,
GL11.GL_NEAREST);
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER,
GL11.GL_LINEAR_MIPMAP_LINEAR);

return textureId;
}

最佳答案

如果你想让透明纹理看起来透明,你必须先启用混合。将以下内容放入您的 OpenGL 初始化代码中。

glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
<小时/>

您还在内部以 RGB 而不是 RGBA 格式存储纹理。

GL11.glTexImage2D(GL11.GL_TEXTURE_2D, 0, GL11.GL_RGB, tWidth, tHeight, 0,
GL11.GL_RGBA, GL11.GL_UNSIGNED_BYTE, buf);

应该变成

GL11.glTexImage2D(GL11.GL_TEXTURE_2D, 0, GL11.GL_RGBA8, tWidth, tHeight, 0,
GL11.GL_RGBA, GL11.GL_UNSIGNED_BYTE, buf);

关于java - LWJGL png纹理透明度(textureColour.a白色而不是黑色),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32992575/

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