在OpenGL ES iPhone中加载非二次幂图像

时间:2011-08-27 17:40:22

标签: iphone opengl-es 2d textures

有没有人知道将纹理加载到OpenGL ES中的有效方法,其大小不是2的幂?我是OpenGL的新手,我正在研究iPhone的2D游戏,我已经制作了很多纹理。返回并将所有纹理调整为2的幂是非常繁琐的工作。

2 个答案:

答案 0 :(得分:3)

出于性能原因,最好将所有精灵推入地图册。地图集是一个大的纹理,包含所有的精灵。有一些工具可以自动执行此过程。例如TexturePacker:http://www.texturepacker.com/

根据您使用的技术,您可能需要解析纹理打包器的输出以获取UV偏移。

答案 1 :(得分:0)

unsigned int NextPOT(unsigned int x)
{
    x = x - 1;
    x = x | (x >> 1);
    x = x | (x >> 2);
    x = x | (x >> 4);
    x = x | (x >> 8);
    x = x | (x >>16);
    return x + 1;
}

unsigned int width  = CGImageGetWidth(image.CGImage);
unsigned int height = CGImageGetHeight(image.CGImage);
unsigned int Width_POT  = NextPOT(width);
unsigned int Height_POT = NextPOT(height);
CGRect Rect = CGRectMake(0,0,width, height);
CGSize size         = CGSizeMake(Width_POT, Height_POT);
UIGraphicsBeginImageContext(size);
[image drawInRect:Rect];
UIImage* result     = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

图像是源图像,其大小为非pow的2,结果是您可以传递给OpenGL的图像