有没有人知道将纹理加载到OpenGL ES中的有效方法,其大小不是2的幂?我是OpenGL的新手,我正在研究iPhone的2D游戏,我已经制作了很多纹理。返回并将所有纹理调整为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的图像