【问题标题】:openGL textures that are not 2^x in dimention尺寸不是 2^x 的 openGL 纹理
【发布时间】:2010-09-26 16:07:28
【问题描述】:

我正在尝试在 openGL 环境中显示图片。图片的原始尺寸是 3648x2432,我想用 256x384 的图像显示它。问题是,384 不是 2 的幂,当我尝试显示它时,它看起来被拉伸了。我该如何解决?

【问题讨论】:

    标签: c++ opengl ldf


    【解决方案1】:

    据我所知,有三种方法可以做到这一点 -

    • Albert 建议的那个(调整大小直到适合为止)。
    • 将纹理细分为 2**n 大小的矩形,并以某种方式将它们拼凑在一起。
    • 看看你是否可以使用GL_ARB_texture_non_power_of_two。不过最好避免使用它,因为它看起来像是 Xorg 特定的扩展。

    【讨论】:

    • 选项 2 很棒 - 防止失去保真度
    【解决方案2】:

    您可以调整纹理的大小,使其 是 2 的幂(倾斜纹理,以便在映射到对象时看起来正确)。

    【讨论】:

    • 我的印象是纹理始终是 2 的幂,因为无论如何硬件都会使用相同数量的资源。但我可能是不正确的。
    【解决方案3】:

    ARB_texture_rectangle 可能是您正在寻找的。它可以让您绑定到GL_TEXTURE_RECTANGLE_ARB 而不是GL_TEXTURE_2D,并且您可以加载非2 次方维度的图像。请注意,您的纹理坐标范围为 [0..w]x[0..h] 而不是 [0..1]x[0..1]。

    【讨论】:

      【解决方案4】:

      如果 GL_EXT_texture_rectangle 为真,则在 glEnable() 和 GLBindTexture() 调用中的第一个参数使用 GL_TEXTURE_RECTANGLE_EXT。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-01-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-11
        • 2016-06-24
        • 2023-03-17
        相关资源
        最近更新 更多