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