当前位置:  开发笔记 > IOS > 正文

为什么iPhone上的纹理图像需要具有二维幂?

如何解决《为什么iPhone上的纹理图像需要具有二维幂?》经验,为你挑选了1个好方法。

我正在尝试解决iphone上的这个闪烁问题(开放式游戏).我有一些没有2维度的图像.我将用适当尺寸的图像替换它们......但为什么尺寸必须是2的幂?



1> TM...:

大多数系统(甚至许多现代图形卡)需要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简单得多.

推荐阅读
贾志军
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有