加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

cocos2d纹理像素格式

发布时间:2020-12-14 21:30:21 所属栏目:百科 来源:网络整理
导读:纹理的像素格式是图像存储在GPU内存的方式。 你可能会见到以下像素格式: RGBA8888(32位)(kTexture2DPixelFormat_RGBA8888) RGBA4444(16位)(kTexture2DPixelFormat_RGBA4444) RGB5_A1(16位)(kTexture2DPixelFormat_RGB5A1) RGB565(16位)(kTex

纹理的像素格式是图像存储在GPU内存的方式。

你可能会见到以下像素格式:

  • RGBA8888(32位)(kTexture2DPixelFormat_RGBA8888)
  • RGBA4444(16位)(kTexture2DPixelFormat_RGBA4444)
  • RGB5_A1(16位)(kTexture2DPixelFormat_RGB5A1)
  • RGB565(16位)(kTexture2DPixelFormat_RGB565)

RGBA8888:

红色通道、绿色通道、蓝色通道和alpha 通道各8位。
如果想获得最好的图片质量,使用这种格式是很靠谱的。
但它会占用的内存会比16位的纹理多一倍,在IPhone上内存是很宝贵的资源,这个你懂的。
自然的,它的运算速度也是相对较慢的。
常用的地方:整个场景的背景图片、大量渐变色的图片。

RGBA4444:

红色通道、绿色通道、蓝色通道、alpha通道各4位
它对每个通道都有不错的支持,还能保证相对良好的速度和内存占用率。
常用的地方:需要有不同的透明度精灵。

RGB5A1:

红、绿、蓝三色通道各5位,Alpha通道仅有1位。
RGB通道表现良好,但是Alpha通道可就惨了。它在内存占用和速度上表现不错。
常用的地方:精灵需要透明度上的表现,但是透明度的表现上只有两种:开或者关。

RGB565:

红色通道5位,绿色通道6位,蓝色通道5位,这可怜的孩子没有Alpha通道。
它能尽最大努力的给你一个高品质的16位纹理,前提是你不需要透明度的支持。
常用的地方:游戏中的背景图像。

cocos2d中默认的像素格式是RGBA8888。

cocos2d 2.1中,貌似默认支持的是16位颜色,需要在 AppDelegate.m中将 glView的pixelFormatkEAGLColorFormatRGB565修改为:kEAGLColorFormatRGBA8。

使用方法:

ps.因为是翻译的,所以按照0.73版本的代码走,如果需要换成cocos2d2.x,轻将里面的Texture2D换成CCTexture2D,kTexture2Dxxx换成kCCTexture2Dxxx。Sprite换成CCSprite。

// Set the pixel format before loading the image
// RGBA 8888 image (32-bit
[Texture2D setDefaultAlphaPixelFormat:kTexture2DPixelFormat_RGBA8888];
Sprite *sprite1 = [Sprite spriteWithFile:@"test-rgba1.png"];
 
// Set the pixel format before loading the image
// RGBA 4444 image (16-bit)
[Texture2D setDefaultAlphaPixelFormat:kTexture2DPixelFormat_RGBA4444];
Sprite *sprite2 = [Sprite spriteWithFile:@"test-rgba2.png"];
 
// Set the pixel format before loading the image
// RGB5A1 image (16-bit)
[Texture2D setDefaultAlphaPixelFormat:kTexture2DPixelFormat_RGB5A1];
Sprite *sprite3 = [Sprite spriteWithFile:@"test-rgba3.png"];
 
// Set the pixel format before loading the image
// RGB565 image (16-bit)
[Texture2D setDefaultAlphaPixelFormat:kTexture2DPixelFormat_RGB565];
Sprite *sprite4 = [Sprite spriteWithFile:@"test-rgba4.png"];
 
// restore the default pixel format
[Texture2D setDefaultAlphaPixelFormat:kTexture2DPixelFormat_Default];
  1. 问:我可以把这种技术使用在PVRTC图像上吗?
    答: 不行,PVRTC图像有自己的格式。PVRTC图像的速度更快,占用的内存更少。因为他们是2位或4位的纹理,但图片质量却并没那么好。
  2. 问:如果我用16位的纹理,我游戏载入速度是不是会更快呢?
    答: 纹理像素格式和你游戏的加载时间没半毛钱关系,像素格式用来管理图像在GPU内存中的存储方式。如果你想要更快的加载时间,你应该减少你.PNG /的GIF / TIFF / TMP图像文件的大小。
  3. 问:我应该使用XCode压缩过的RGB565图像吗?
    答: XCode压缩过的PNG图像有它自己的RGBA通道。即使PNG图像的格式是RGB565,你也不该混淆纹理像素格式和PNG图像格式。PNG图像的格式可以被Photoshop和cocos2d所识别,但GPU知道对其一无所知,而PNG图像最终需要转换成纹理(GPU所能理解的格式)。最终答案是:你究竟想要什么呢?你需要的是和图像格式(PNG,GIF TIFF,BMP)的无关的纹理格式!
  4. 问:如果我创建一个PNG / BMP / TIFF / GIF等图像没有alpha通道,我可以改变纹理像素格式?
    答:如果您的PNG / BMP / TIFF / GIF等图像没有alpha通道(或不预乘),那么纹理??像素格式将被设置成RGB565。它是无法被API改变的,但你可以通过修改Texture2D.m文件来实现。
  5. 问:我可以一次性的修改已创建纹理的像素格式吗? 答:没戏。一旦创建了纹理,你就不能修改纹理的像素格式啦!但是你可以从同一个图像创建不同格式的纹理。但是这之前千万别忘了从TextureMgr里面移除这个纹理(到了cocos2d 2.x的时候应该是CCTextureCache,这个cache会保存原来的纹理,所以如果创建同名纹理的时候,别忘记移除之前的那个)。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读