1

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

所以我的想法是我需要在 FBO 上透支,并以某种方式在前一个 FBO 中断的地方接续下一个FBO 。但是我不知道该怎么做。我正在用一系列六边形网格绘制六边形网格,仅供参考。

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

4

1 回答 1

3

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

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

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

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

您不需要 FBO。如果需要,您可以将其绘制到屏幕上。glReadPixels尽管如果您想要获得最大性能,我建议您使用 FBO,对它们进行双重缓冲,然后使用像素缓冲区对象。这应该会大大减少延迟。

于 2012-02-02T01:07:47.790 回答