cocos2d x 紋理畫素格式

2021-06-26 06:30:09 字數 3228 閱讀 2299

紋理的畫素格式是影象儲存在gpu記憶體的方式。

你可能會見到以下畫素格式:

紅色通道、綠色通道、藍色通道和alpha 通道各8位。

如果想獲得最好的質量,使用這種格式是很靠譜的。

但它會占用的記憶體會比16位的紋理多一倍,在iphone上記憶體是很寶貴的資源,這個***。

自然的,它的運算速度也是相對較慢的。

常用的地方:整個場景的背景、大量漸變色的。

紅色通道、綠色通道、藍色通道、alpha通道各4位

它對每個通道都有不錯的支援,還能保證相對良好的速度和記憶體佔用率。

常用的地方:需要有不同的透明度精靈。

紅、綠、藍三色通道各5位,alpha通道僅有1位。

rgb通道表現良好,但是alpha通道可就慘了。它在記憶體占用和速度上表現不錯。

常用的地方:精靈需要透明度上的表現,但是透明度的表現上只有兩種:開或者關。

紅色通道5位,綠色通道6位,藍色通道5位,這可憐的孩子沒有alpha通道。

它能盡最大努力的給你乙個高品質的16位紋理,前提是你不需要透明度的支援。

常用的地方:遊戲中的背景影象。

cocos2d-x中預設的畫素格式是rgba8888。

使用方法:

ps.因為是翻譯的,所以按照0.73版本的**走,如果需要換成cocos2d2.x,輕將裡面的texture2d換成cctexture2d,ktexture2d***換成kcctexture2d***。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會儲存原來的紋理,所以如果建立同名紋理的時候,別忘記移除之前的那個)。

cocos2dx 紋理快取

快取 cache 機制的原理是什麼?把新加進記憶體的資源做乙個hashmap儲存,每乙個資源加乙個key。每次載入資源,先從快取中尋找,如果找到就直接返回,否則載入到記憶體後再返回。一 自動快取紋理 直接使用display.newsprite filename 建立精靈,引擎內部會自動把紋理載入到快...

cocos2dx 紋理快取

在遊戲中需要載入大量的紋理,這些操作都是很耗記憶體和資源的。當遊戲中有個介面用到的非常多,第一次點進這介面時速度非常慢 因為要載入繪製很多 出現卡頓,我們可以使用texturecache提前非同步載入紋理,等載入結束,進入到這個介面再使用這些速度就會非常快。texture2d 紋理,即加載入記憶體後...

cocos2d x 獲取紋理資料

s sprite create res gire.png s setposition visiblesize 2 this addchild s auto id s gettexture getname int format,width,height glgettexlevelparameteriv...