【发布时间】:2011-08-11 13:42:46
【问题描述】:
我还不太了解 OpenGL ES。我只学过画三角形等等。我还没有学习纹理。
我听说在某些设备中,图像的宽度或高度必须是 2 的幂,例如:2、4、8、16、32 等。为什么?如果我有尺寸为 53 x 76 的图像,我该怎么办?
我需要知道这一点,因为这是阻止我从画布切换到 OpenGL ES 的原因。 谢谢你:)
【问题讨论】:
我还不太了解 OpenGL ES。我只学过画三角形等等。我还没有学习纹理。
我听说在某些设备中,图像的宽度或高度必须是 2 的幂,例如:2、4、8、16、32 等。为什么?如果我有尺寸为 53 x 76 的图像,我该怎么办?
我需要知道这一点,因为这是阻止我从画布切换到 OpenGL ES 的原因。 谢谢你:)
【问题讨论】:
具有 2 次幂的纹理极大地简化了纹理硬件,并为许多优化腾出空间以使其更快。如果您有非 2 次幂纹理,则有两种选择:
1) 用你想要的任何东西填充“额外”的空间(我会选择像亮绿色这样的颜色,这样如果你在屏幕上看到这种颜色,你就知道你在 texcoords 上做错了),在您的示例中,它将是 64x128,并调整您的纹理坐标以进行补偿。 IE。您的 texcoords 现在将从 (0, 0) 变为 (53.0/64.0, 76.0/128.0)。
2) 将纹理拉伸到最接近的 2 次方,在您的示例中再次为 64x128,并按原样使用现有的 texcoords。
【讨论】:
一般来说,图形芯片处理宽度和高度为 2 次方的图像更简单,需要更少的逻辑/芯片空间。如果您开始使用 mip-map,这将变得更加重要。
一些 OpenGL|ES 图形芯片支持非两个纹理的幂,但这需要付出一定的代价:不支持 Mip-Maps,如果开始旋转图像,您可能会受到巨大的性能影响。
【讨论】: