尺寸不是 2^x 的 openGL 纹理
我正在尝试在 openGL 环境中显示图片。 图片的原始尺寸是3648x2432,我想用256x384的图像显示它。 问题是,384 不是 2 的幂,当我尝试显示它时,它看起来很拉伸。 我该如何解决这个问题?
I'm trying to display a picture in an openGL environment. The picture's origninal dimensions are 3648x2432, and I want to display it with a 256x384 image. The problem is, 384 is not a power of 2, and when I try to display it, it looks stretched. How can I fix that?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
据我所知,有三种方法可以做到这一点 -
GL_ARB_texture_non_power_of_two
。 不过,最好避免它,因为它看起来像是 Xorg 特定的扩展。There's three ways of doing this that I know of -
GL_ARB_texture_non_power_of_two
. It's probably best to avoid it though, since it looks like it's an Xorg-specific extension.您可以调整纹理的大小,使其为2的幂(倾斜纹理,以便当它映射到对象上时它看起来是正确的)。
You can resize your texture so it is a power of two (skew your texture so that when it is mapped onto the object it looks correct).
ARB_texture_rectangle
可能就是您正在寻找的。 它允许您绑定到GL_TEXTURE_RECTANGLE_ARB
而不是GL_TEXTURE_2D
,并且您可以加载非 2 次幂维度的图像。 请注意,纹理坐标的范围为 [0..w]x[0..h],而不是 [0..1]x[0..1]。ARB_texture_rectangle
is probably what you're looking for. It lets you bind toGL_TEXTURE_RECTANGLE_ARB
instead ofGL_TEXTURE_2D
, and you can load an image with non power-of-2 dimensions. Be aware that your texture coordinates will range from [0..w]x[0..h] instead of [0..1]x[0..1].如果 GL_EXT_texture_rectangle 为 true,则在 glEnable() 和 GLBindTexture() 调用中使用 GL_TEXTURE_RECTANGLE_EXT 作为第一个参数。
If GL_EXT_texture_rectangle is true then use GL_TEXTURE_RECTANGLE_EXT for the first param in glEnable() and GLBindTexture() calls.