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

时间:2012-02-02 00:24:08

标签: java image opengl textures libgdx

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

所以我想的是我需要透支FBO并以某种方式接收下一个FBO 完全前一个停止的地方。但是我不知道该如何解决这个问题。我正在用一系列六边形网格绘制十六进制网格,仅供参考。

当然,可能还有一些其他更简单,更有效的方法,我甚至都没有想到这个,这就是为什么我向好人提出这个问题的原因!

1 个答案:

答案 0 :(得分:3)

你必须把它画成碎片。您需要能够从任意位置绘制十六进制网格。这意味着能够根据覆盖在地图上的矩形计算要绘制的十六进制。这不是一个难题,我不会太担心在屏幕外绘制额外的东西。您应该掌握这种能力,以便在继续之前从任何位置查看hexmap。

一旦掌握了这一点,就会非常简单。

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

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

你不需要FBO。如果你愿意,你可以将它绘制到屏幕上。虽然如果你想要最大的性能,我会建议使用FBO,双缓冲它们,并使用glReadPixels虽然pixel buffer object。这应该会减少延迟。