gpt4 book ai didi

java - 使用纯 OpenGL 加载 PNG 文件

转载 作者:行者123 更新时间:2023-11-29 07:04:28 25 4
gpt4 key购买 nike

我正在尝试用 Java 制作一个简单的游戏。

我想知道如何只使用 OpenGL 库读取 PNG 文件并在游戏中使用它。

任何人都可以提供可以实现此目的的任何代码吗?

最佳答案

您不能仅使用 OpenGL 加载图像。您应该始终牢记,OpenGL 是一个图形 API,仅此而已:不是游戏框架,也不是可以为您执行 IO 操作的东西,等等。
您提供数据,OpenGL 负责繁重的工作。

回答您的问题:我个人在我的项目中使用 TWL 的 PNGDecoder。它快速、简单且易于使用。官方LWJGL wiki has an article about it ,检查一下。

这是一个关于如何使用它的简单示例:

try(BufferedInputStream is = new BufferedInputStream(new FileInputStream(filePath))){
//Create the PNGDecoder object and decode the texture to a buffer
PNGDecoder decoder = new PNGDecoder(is);
int width = decoder.getWidth(), height = decoder.getHeight();
ByteBuffer pixelData = BufferUtils.createByteBuffer(4*width*height);
decoder.decode(pixelData, 4*width, Format.RGBA);
pixelData.flip();
//Generate and bind the texture
int id = GL11.glGenTextures();
GL11.glBindTexture(GL11.GL_TEXTURE_2D, id);
//Upload the buffer's content to the VRAM
GL11.glTexImage2D(GL11.GL_TEXTURE_2D, 0, GL11.GL_RGBA, width, height, 0, GL11.GL_RGBA, GL11.GL_UNSIGNED_BYTE, pixelData);
//Apply filters
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);
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_LINEAR);
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_LINEAR);
GL11.glBindTexture(GL11.GL_TEXTURE_2D, 0);
}catch(IOException e){
e.printStackTrace();
}

稍后当您想要使用纹理时,只需执行 GL11.glBindTexture(GL11.GL_TEXTURE_2D, id);在你渲染之前。我强烈建议使用某种数据结构来存储您的纹理以供重复使用(您应该只将纹理上传到 VRAM 一次,并在需要时使用它的 ID 多次使用它)。我个人使用自己的 Texture类和一个TextureBank静态类 HashMap<String, Texture>其中键是纹理的名称,值是适当的 Texture对象,用于存储纹理。

关于java - 使用纯 OpenGL 加载 PNG 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21399242/

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