我正在尝试解决iphone上的这个闪烁问题(开放式游戏).我有一些没有2维度的图像.我将用适当尺寸的图像替换它们......但为什么尺寸必须是2的幂?
大多数系统(甚至许多现代图形卡)需要2次幂纹理的原因是mipmapping.
什么是mipmapping?
将创建较小版本的图像,以使物体看起来非常小.图像被反复划分为2以制作新图像.
所以,想象一下256x128的图像.这将创建尺寸为128x64,64x32,32x16,16x8,8x4,4x2,2x1和1x1的较小版本.
如果这个图像是256x192,它将工作正常,直到你达到4x3的大小.下一个较小的图像将是2x1.5,这显然不是有效的大小.一些图形硬件可以处理这个,但许多类型不能.
某些硬件也需要方形图像,但这不再常见.
你为什么需要mipmapping?
想象一下,你有一张非常遥远的照片,距离只有4像素的大小.现在,当绘制每个像素时,将选择图像上的位置作为该像素的颜色.因此,您最终会得到4个像素,这些像素可能完全不能代表整个图像.
现在,想象一下这幅画正在移动.每次绘制新帧时,都会选择一个新像素.因为图像很远,所以很可能会看到非常不同的颜色,以适应运动中的微小变化.这导致非常难看的闪烁.
缺少mipmapping导致任何小于纹理大小的大小的问题,但是当将图像绘制到非常少量的像素时它是最明显的.
使用mipmap,硬件可以访问2x2版本的纹理,因此它上面的每个像素都是图像象限的平均颜色.这消除了奇怪的颜色闪烁.
http://en.wikipedia.org/wiki/Mipmap
编辑给那些不再这样说的人:很多现代GPU都可以支持非二次幂纹理,但很多人不能这样做.
事实上,就在上周,我在一个正在研发的XNA应用程序中使用了1024x768纹理,并且在一台只有一年左右的笔记本电脑上导致游戏负载崩溃.它在大多数机器上运行良好.可以肯定的是,iPhone的gpu比完整的PC gpu简单得多.