java - 使用 OpenGL 和 libgdx 在运行时生成非常大的图像

标签 java image opengl textures libgdx

我正在生成非常大的六边形网格(在 32 像素宽的六边形中多达 120k 的总六边形会产生超过 12k 宽的图像)并且我正在尝试找到一种有效的方法将这些网格绑定(bind)到 libgdx 中的 OpenGL 纹理。我正在考虑使用多个 FBO,并根据需要将网格分解成多个图 block ,但我不确定如何确保 FBO 之间的连续性。我不能从一个巨大的 FBO 开始,因为它由纹理支持,所以它会因尝试将其加载到视频内存而失败。我不能在堆上使用标准位图,因为我需要 OpenGL 表面的绘图功能。

所以我在想的是,我需要 overdraw FBO,并以某种方式在下一个 FBO 上恰好上一个停止的地方。但是我不确定如何去做。我正在用一系列六边形网格绘制六边形网格,仅供引用。

当然,可能还有其他一些我什至没有想到的更简单、更有效的方法来做到这一点,这就是为什么我向你们好人提出这个问题!

最佳答案

你必须把它分成几 block 来画。您需要能够从任意位置绘制六角网格。这意味着能够根据覆盖在 map 上的矩形计算绘制哪些六边形。这不是一个难题,我不会太担心在屏幕外绘制额外的东西。在继续之前,您应该掌握从任何位置查看六角图的能力。

一旦你掌握了它,它真的很简单。

绘制左上角并存储像素数据。然后将您正在绘制的区域移动到恰好一个图像宽度上。绘制并存储它。将区域移动一个图像宽度。绘制并存储它。继续这样做,直到覆盖整个宽度。

向下移动一个图像高度并重复该过程。一旦你用完了宽度和高度,你就完成了。保存您的超大图片。

为此您不需要 FBO。如果你愿意,你可以把它画到屏幕上。虽然如果你想要最高性能,我建议使用 FBO,对它们进行双缓冲,并通过 pixel buffer object 使用 glReadPixels .这应该会大大减少延迟。

关于java - 使用 OpenGL 和 libgdx 在运行时生成非常大的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9105468/

相关文章:

java - 在 OpenGL 中渲染加载了 Assimp 的动画模型时网格折叠

java - FileNotFoundException:但文件确实存在

java - 如何在远程计算机上将 Java 与 R 集成?

delphi - JPEG-LS/LOCO-I 压缩库

jquery - 用 jquery 交换图像 src

c++ - OpenGL VBO 更新数据

opengl - 片段着色器如何确定顶点着色器输出的片段数量?

java - 我需要一个工具来解析 Lua 表,最好是用 Ruby 或 Java

java - 使用正确的jdk打包

Java Swing ImageIcon 未在 JLabel 中显示