【问题标题】:Generating Very Large Images at Runtime with OpenGL and libgdx使用 OpenGL 和 libgdx 在运行时生成非常大的图像
【发布时间】:2012-02-02 00:24:08
【问题描述】:

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

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

当然,可能还有其他更简单、更有效的方法可以做到这一点,我什至都没有想到,这就是我向各位好人提出这个问题的原因!

【问题讨论】:

    标签: java image opengl textures libgdx


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 很棒的答案,而且速度也很快!谢谢!
    猜你喜欢
    • 2015-11-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-27
    • 2015-07-06
    • 2023-03-08
    • 2014-03-21
    • 2011-07-23
    • 2019-01-03
    相关资源
    最近更新 更多