【问题标题】:libDGX doesn't draw texture with big dimensionlibGDX 不会绘制大尺寸的纹理
【发布时间】:2018-04-03 16:58:00
【问题描述】:

我无法在桌面上的 libGDX 中绘制大图像。我有一个尺寸为 9494x13082 像素的图像并使用 batch.draw(texture, 0, 0, width, height);。而不是纹理 libGDX 绘制一个黑色正方形。如果我将图像压缩到 60% 或更多,一切正常。我尝试使用TextureRegion,但这也不起作用。 请告诉我,可能是什么问题。也许我没有足够的内存?

我在 Linux 中工作,OpenGL ES 2.0,2GB 内存,Java 的最小 RAM - 1GB,最大 - 2GB。

【问题讨论】:

  • 用glGetIntegerv 查询GL_MAX_TEXTURE_SIZE得到哪个值?
  • 3379。这是什么意思?
  • 哦,对不起。 8192. 我可以绕过这个限制吗?也许,切割图像或其他。 TextureRegion 帮不上忙(

标签: java opengl-es libgdx textures


【解决方案1】:

首先:opengl 纹理尺寸等于 h&w; 即使你没有宽度等于高度,那么最大的邻接也会被考虑为另一个,并最终将正方形分配给该内存。

第二:你的图片最好不要大于2048 * 2048。我觉得最大是4096 * 4096。

opengl 1 不支持 POT。 libgdx 将你的纹理更改为 POT。所以,最好的纹理尺寸是牵引力。 使用此参数禁用 libgdx 的强制 POT。

Texture.setEnforcePotImages(false);

现在你的解决方案:

您必须将照片分成更小的部分。例如 2048 * 2048(POT) 然后用 TEXTURE_PACKER 打包它们。然后把它画在你需要的地方。

请注意,如果您使用的是压缩工具,请注意压缩文件与图形压缩不同。因此,jpg 或 png 不会占用更少的内存空间。 您应该使用纹理压缩器,例如:etc1、etc2、ktx、....

我为你编写示例代码:

   // in this sample my image is 5*4 (5*4 - 2048*2048)
   for (int i = 0; i < 5; i++) {
        for (int j = 0; j < 4; j++) {
              batch.draw(texture[i,j], i*2048, j*2048, width, height);
        }
    }

【讨论】:

  • 你能告诉我,我如何分割图像吗?只在 libGDX 之外?
  • opengl 纹理尺寸等于 h&w 你有证据吗?至少在我的硬件上,1024x2 纹理不会消耗与 1024x1024 纹理相同的内存。
  • @BDL :确实取决于 OpenGL ES 版本,OpenGL ES 1.0/1.1 具有两个限制的力量。 OpenGL ES 2.0 没有限制,但它限制了两个纹理的非幂的环绕模式。创建更大的纹理以匹配 POT 尺寸确实会浪费纹理内存。
  • @Ryder95 : 可以使用adobe photoshop,分割工具
  • @Ryder95 TextureRegion 有 split() 方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-08-04
  • 1970-01-01
  • 2018-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多