【问题标题】:LibGDX, OpenGL 2.0 and textures having to be powers of two?LibGDX、OpenGL 2.0 和纹理必须是 2 的幂?
【发布时间】:2015-01-16 10:37:58
【问题描述】:

我知道在使用 OpenGL 2.0 和 libGDX 时,我的纹理图像必须是 2 的幂。这在此页面https://github.com/libgdx/libgdx/wiki/Textures,-textureregion-and-spritebatch 上进行了说明。

我无法理解的一件事是,这并不总是正确的。我正在创建一个具有启动画面的应用程序,并且我使用的纹理直接加载到类声明(屏幕)中,如下所示;

private TextureRegion textureRegion = new TextureRegion(
        new Texture(Gdx.files.internal("images/splashLogo.png"))
);

此图像的尺寸为 133 x 23,显然不是 2 的幂;但是,一切都很好。

在我的游戏中,我使用 AssetManager 将纹理等加载到我的游戏中,但我发现我使用的纹理大小必须为 ^2,例如 128x32、512x512 等,否则它们不起作用?

下面是我的资产管理器提供的一组纹理示例;

shapes = TextureRegion.split(Assets.assetManager.get("images/shapeSprite.png", Texture.class), 64, 64);
    for (TextureRegion[] shapeSet: shapes) {
        for (TextureRegion shape: shapeSet) {
            shape.flip(false, true);
        }
    }

纹理为 512x512,如果不是,则不显示纹理区域。

为什么有些纹理的大小必须是 2 次方,而有些则没有?

【问题讨论】:

    标签: opengl libgdx


    【解决方案1】:

    严格的二次幂 (POT) 大小要求仅适用于 OpenGL ES 1.x。自 libGDX 版本 1.0.0 起,libGDX 不再支持此版本的 OpenGL ES。所以对纹理不再有严格的 POT 要求了。

    但是,根据 GPU 的不同,非 POT 纹理尺寸可能不支持某些功能(例如纹理包装)。此外,在实践中,非 POT 大小的纹理可能(将)使用与最近的较大 POT 大小相同的内存量。

    由于这些原因,并且由于无论如何都应该将多个纹理打包到图集中,强烈建议始终使用 POT 大小的纹理。

    另请参阅:Is there any way to ignore libgdx images Limitation? (images must be power of two)

    如果这不能回答您的问题,那么请考虑重新表述您的问题并解释“它们不起作用”的意思。

    【讨论】:

    • Xoppa 先生您好,我冒昧地使用您提供的答案从 LibGDX wiki 更新了“纹理、纹理区域和 spritebatch”页面,因为那里的信息已经过时了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-19
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    相关资源
    最近更新 更多