我對使用blitting進行圖形處理有點新。但是我自己也做了一些演示,並且我一直在閱讀關於所用方法的大量信息。使用blitting提高性能
我一直看到的一個常見主題是,它們都是暴力渲染;先繪製最遠的後部物體,然後逐步穿過所有其他物體。甚至繪製將要完全重疊的對象。
他們之所以說這是因爲任何一種測試,看看應該繪製什麼,實際上需要更多的時間,而不是僅僅繪製沒有檢查的東西。
是否有任何方式來檢測應該繪製什麼,比繪製所有東西更快運行?
我對使用blitting進行圖形處理有點新。但是我自己也做了一些演示,並且我一直在閱讀關於所用方法的大量信息。使用blitting提高性能
我一直看到的一個常見主題是,它們都是暴力渲染;先繪製最遠的後部物體,然後逐步穿過所有其他物體。甚至繪製將要完全重疊的對象。
他們之所以說這是因爲任何一種測試,看看應該繪製什麼,實際上需要更多的時間,而不是僅僅繪製沒有檢查的東西。
是否有任何方式來檢測應該繪製什麼,比繪製所有東西更快運行?
實際上很難判斷檢查繪製或繪製東西的速度是否更快。你可以使用兩個像如果有超過圖像,使用繪製檢查,如果沒有,繪製它們全部。 ...
所以 - 在吸引他們所有的方法是非常明顯的,並且對平局檢查它是這樣的:
// drawCheck
var w:int = 300;
var h:int = 200;
var result:Bitmap = new Bitmap(w, h);
for (var x:int = 0; x < w; x++){
for (var y:int = 0; y < h; y++){
result.bitmapData.setPixel32(x, y, 0x00FFFFFF);
for (var iid:int = 0; iid < images.length; iid++){
var resC:uint = result.bitmapData.getPixel32(x, y);
var resA:uint = resC >>> 24;
var resR:uint = resC >>> 16 & 0xFF;
var resG:uint = resC >>> 8 & 0xFF;
var resB:uint = resC & 0xFF;
if (resA == 0xFF){
break;
}
var oriC:uint = images[iid].bitmapData.getPixel32(x, y);
var oriA:uint = oriC >>> 24 &;
var oriR:uint = oriC >>> 16 & 0xFF;
var oriG:uint = oriC >>> 8 & 0xFF;
var oriB:uint = oriC & 0xFF;
var newA:uint = resA + oriA;
var newR:uint = (256/resA) * resR + (256/oriA) * oriR;
var newG:uint = (256/resA) * resR + (256/oriA) * oriG;
var newB:uint = (256/resA) * resR + (256/oriA) * oriB;
var newC:uint = newA << 24 | newR << 16 | newG << 8 | newB;
result.bitmapData.setPixel32(x, y, newC);
}
}
}
基本上,也許繪圖可能會更快,但我不知道 - 按位操作...反正 - 你應該明白 - 這個循環通過X和Y座標,最後通過圖像。
注:圖像被存儲,如:0 =前,images.length - 1 =背面
它檢查(該處)如果所生成位圖已經完全通過檢查阿爾法繪製(如果它等於0xFF,沒有使用繪圖),如果不是,它合併顏色並添加alpha。
你應該做一些性能測試,以便我們知道什麼是更快,什麼時候...