2016-02-27 48 views
0

我正在處理一個嘗試對數據數組進行壓縮的項目。到目前爲止,我一直在使用Canvas元素和putImageData/getImageData來完成我的計算。我知道一般Canvas和webGl用於圖像處理,但在這種情況下,我將像素值轉換爲我需要的數字,並且工作正常。webgl在處理像素時是否可以使用邏輯

我想使用webGl來執行壓縮/解壓縮,因爲它的速度提高了。然而,根據我的理解,webGl在某種程度上受限於它可以計算的數學類型。

所以我的問題是,是否有可能將下面的「邏輯」移植到webgl中,還是使用普通的javascript運行計算?

這是我試圖複製的邏輯。比方說,你有數據的排列,它看起來像這樣:

1,2,3,4,5,10,11,12,13,16,17,18,19

在此模式數組就是它加1,但偶爾它會跳過幾個數字然後重新開始。我利用這種模式的方式是將這個單個數組轉換爲2個數組。

第一個數組跟蹤「where」數字「跳躍」。第二個數組跟蹤每次跳轉後的第一個數字,所以我知道從哪裏開始再次計數。

所以經壓縮的數據看起來像這樣: 第一個陣列(存儲跳躍的位置):1,6,10 第二陣列(存儲在每一跳的值):1,10,16

我使用canvas imgData處理「重建」原始數組的方式是使用for循環。該方案是這樣的:

//Setup some variables 
var jumpDistance = 0; 
var y = 0; 

for(x = 0; x < 13; x ++){ //13 is the length of the original array 

    jumpDistance = firstArray[y]; 
    originalArray[x] = originalArray[x] + secondArray [y]; 

    for(var jd = 1; jd < jumpDistance + 1; jd ++){ 
     originalArray[x + jd] = originalArray[x + jd] + 1; 
    } 

    y = y + 1; 
    x = x + jumpDistance; 
} 

這裏的主要邏輯我希望在WebGL的複製是我怎麼能以更快的「速度」,然後我通過第一2個陣列是構建它讀取建立最終的陣列。

我知道webGl能夠讀取當前像素周圍的其他像素。但是,無論如何,要根據已經存儲在另一個數組中的數據來讀取某個像素嗎?如果這是可能的,請讓我知道!

非常感謝!

回答

0

但是有無論如何根據已經存儲在另一個數組中的數據來讀取某個像素嗎?

WebGL使用紋理座標從紋理(它是數據數組)中查找數據。因此,您可以使用一個紋理的結果來查找其他紋理的數據。

// get a pixel from someTexture (a type of array) 
vec4 pixel = texture2D(someTexture, someTextureCoordinate); 

// use it to look up data from another texture (a type of array) 
vec2 otherTexCoord = pixel.xy; // OR whatever math you want 
vec4 pixel2 = texture2D(someTexture2, otherTexCoord); 
+0

哇!這句話完美!非常感謝您的快速響應! – YAHsaves

相關問題