1. 程式人生 > >cocos2d-x 紋理畫素格式

cocos2d-x 紋理畫素格式

紋理的畫素格式是影象儲存在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-x中預設的畫素格式是RGBA8888。

cocos2d 2.1中,貌似預設支援的是16位顏色,需要在 AppDelegate.m中將 glView的pixelFormatkEAGLColorFormatRGB565修改為:kEAGLColorFormatRGBA8。

使用方法:

ps.因為是翻譯的,所以按照0.73版本的程式碼走,如果需要換成cocos2d2.x,輕將裡面的Texture2D換成CCTexture2D,kTexture2Dxxx換成kCCTexture2Dxxx。Sprite換成CCSprite。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 // 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會儲存原來的紋理,所以如果建立同名紋理的時候,別忘記移除之前的那個)。