HappyCoding:] ChildhoodAndy

思维世界的发展,在某种意义上说,就是对惊奇的不断摆脱。——爱因斯坦

聊聊Cocos2d纹理

| Comments

@[Cocos2d|纹理]

写在前面

在cocos2d中,纹理与图形渲染有着密不可分的关系。纹理会存储在GPU内存中,纹理的像素格式决定了图片所占用的GPU内存,跟加载的所用的时间没有关系,但可以通过减小PNG/GIF/TIFF/TMP等图片的大小来缩短加载的时间,也可以将图像格式导出成PVR格式,IOS设备通常使用PowerVR显示芯片,而PVR格式的图片可以直接被该显示芯片直接读取,不需要解析直接显示,渲染速度更快,更节省内存,pvr.ccz图像格式是pvr的压缩格式,占用空间更小。

我们可能用到像素格式有:

  • BGRA8888(32 bit)

32位真彩色,红、绿、蓝、透明通道各8位,占用内存是16位纹理的2倍,整个场景的背景图片、具有大量渐变色的图片可以考虑这个格式

  • RGBA8888(32 bit)

同上

  • RGB888(24 bit)

24位真彩色,红、绿、蓝通道各8位,没有透明通道

  • RGB565(16 bit)

16位,红、蓝通道5位,绿色通道6位,是一个图像质量还不错的16位纹理格式,也可考虑用作游戏中的背景图像

  • A8(8 bit)

只有透明通道的8位,用来做遮罩图

  • I8(8 bit)

8位,存储灰度信息,用来做灰度图

  • AI88(16 bit)

16位,存储透明度和灰度信息

  • RGBA4444(16 bit)
  • RGB5A1(16 bit)

16位,红、绿、蓝通道各5位,透明通道1位(0/1),所以透明度的表现只有两种,非黑即白

  • PVRTC4(4 bit)
  • PVRTC4A(4 bit)
  • PVRTC2(2 bit)
  • PVRTC2A(2 bit)
  • ETC
  • S3TC_DXT1
  • S3TC_DXT3
  • S3TC_DXT5
  • ATC_RGB
  • ATC_EXPLICIT_ALPHA
  • ATC_INTERPOLATED_ALPHA

怎么使用

Cocos2dX版本:3.0

在载入图像之前设置纹理格式,然后进行精灵实例化操作

Texture2D::setDefaultAlphaPixelFormat(Texture2D::PixelFormat::RGBA8888);
Sprite* sprite = Sprite::create("test.png");

当纹理被创建之后,我们就不能再修改纹理的像素格式了,但是我们可以通过CCTextureCache移除该纹理,就可以重新从同个图片资源用不同的纹理像素格式来创建纹理了。

相关阅读

Comments

comments powered by Disqus