cocos2d-x 紋理畫素格式
阿新 • • 發佈:2019-02-13
紋理的畫素格式是影象儲存在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的pixelFormat從kEAGLColorFormatRGB565修改為: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]; |
-
問:我可以把這種技術使用在PVRTC影象上嗎?
答: 不行,PVRTC影象有自己的格式。PVRTC影象的速度更快,佔用的記憶體更少。因為他們是2位或4位的紋理,但圖片質量卻並沒那麼好。 -
問:如果我用16位的紋理,我遊戲載入速度是不是會更快呢?
答: 紋理畫素格式和你遊戲的載入時間沒半毛錢關係,畫素格式用來管理影象在GPU記憶體中的儲存方式。如果你想要更快的載入時間,你應該減少你.PNG /的GIF / TIFF / TMP影象檔案的大小。 -
問:我應該使用XCode壓縮過的RGB565影象嗎?
答: XCode壓縮過的PNG影象有它自己的RGBA通道。即使PNG影象的格式是RGB565,你也不該混淆紋理畫素格式和PNG影象格式。PNG影象的格式可以被Photoshop和cocos2d所識別,但GPU知道對其一無所知,而PNG影象最終需要轉換成紋理(GPU所能理解的格式)。最終答案是:你究竟想要什麼呢?你需要的是和影象格式(PNG,GIF TIFF,BMP)的無關的紋理格式! -
問:如果我建立一個PNG / BMP / TIFF / GIF等影象沒有alpha通道,我可以改變紋理畫素格式?
答:如果您的PNG / BMP / TIFF / GIF等影象沒有alpha通道(或不預乘),那麼紋理畫素格式將被設定成RGB565。它是無法被API改變的,但你可以通過修改Texture2D.m檔案來實現。 -
問:我可以一次性的修改已建立紋理的畫素格式嗎?
答:沒戲。一旦建立了紋理,你就不能修改紋理的畫素格式啦!但是你可以從同一個影象建立不同格式的紋理。但是這之前千萬別忘了從TextureMgr裡面移除這個紋理(到了cocos2d 2.x的時候應該是CCTextureCache,這個cache會儲存原來的紋理,所以如果建立同名紋理的時候,別忘記移除之前的那個)。