java - 如何用LWJGL将图像保存到内存中?

标签 java image opengl textures lwjgl

我已经使用java常规图形设备、awt和swing东西、Graphics、Graphics2D等有一段时间了,然后开始观看一系列关于LWJGL的教程。我真的很喜欢并决定在该系统中重做我的一款游戏;我想,既然我已经有了逻辑,那就很容易了。我刚刚遇到了一个概念问题。

在这个特定的例子中,我有一个代表盒子的类 Box,但我用图像绘制了它,从而制作了边框。我有 9 张图像,一张用于中心(这只是一张纯色 1 像素宽度图像),4 张用于侧面,4 张用于角落。我将所有这些图像放在 BufferedImage 数组中,该数组是静态的,因为所有盒子的图像都是相同的。然后,每个盒子都有一个全局的 BufferedImage,我在其中绘制了盒子,这是一个非常慢的过程,因为我必须在盒子的每个部分都绘制图像。然后,在真正的绘制方法(收到 Graphics g)中,我只是将 BufferedImage 绘制在正确的位置。由于框的大小在创建后就不会改变,因此我只需在构造函数中“创建”一次框图像即可。

我不知道如何使用 LWJGL 做到这一点,因为 gl_ 方法(​​glBegin()、glVertex2i())将始终在屏幕上绘制,即使我从未指定过。那么,如何绘制图像以及如何将其存储在内存中(也使用 BufferedImage),以及如何在需要时将其绘制在屏幕上?我发现LWJGL使用纹理,我将BufferedImage的第一个静态数组设置为Texture的静态数组,然后正确地将9个纹理中的每一个保存在其中。这是正确的方法吗?那么全局BufferedImage呢,它应该是一个全局Texture吗?在这种情况下,如何在纹理上“绘制”?

最佳答案

您正在寻找的技术通常称为“渲染到纹理”(RTT)。您创建一个 opengl 帧缓冲区,向其附加纹理,绑定(bind)帧缓冲区,然后发出正常的绘制调用。通过帧缓冲区绑定(bind),绘制调用将直接绘制到纹理中。然后,您解除帧缓冲区的绑定(bind)并将纹理用作普通纹理。

通过这些搜索词,我相信您可以在互联网上找到有关如何执行此操作的教程。

我只是很好奇,你的盒子是什么样子的,不能用正常的纹理绘制?也许有更简单的方法。

关于java - 如何用LWJGL将图像保存到内存中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11171427/

相关文章:

java - 从备份恢复数据库后无法连接到数据库

java - 如何向指定的提供者发送证书并在另一端接收它?

linux - 在 Linux 操作系统中更新时自动刷新打开图形(例如显示在 Imagemagick 上)

css - 调整图像大小,固定位置

c++ - Windows 10 上 VS 2015 中 nupengl GLFW 的链接错误

java - 根据用户输入选择子类?

java - Mozilla Firefox 的意外行为

ios - 如何在iOS中加载大量图像?

c++ - Windows 不在 OpenGL 窗口上方绘制

c++ - 使用点积调整 glRotate