簡體   English   中英

該gpu操作的算法?

[英]Algorithm for this gpu operation?

我正在使用允許在GPU上計算大型矩陣運算的庫gpu.js。 我不認為我想做的事並不難,但似乎無法開始尋找算法。 基本上,我將每個像素重復的數組緩沖區存儲為r,g,b,a,因此4x4圖像將是64個值的數組。

我想輸出比輸入大X倍的圖像,但要進行“最近鄰居”計算,因此每個像素都變成2x2正方形或3x3等。

因此,操作是這樣設置的(注意gpu.js需要數組作為輸入),並記住它是在完整大小的輸出上進行迭代,因此我必須根據當前索引找到較小的sourceBuffer中將存在的正確坐標。在outputBuffer (索引由lib作為this.thread.x )。

var pixelateMatrix = gpu.createKernel(function(inputBuffer, width, height, scale) {
  var y = Math.floor(this.thread.x / (width[0] / scale[0]) * 4);
  var x = this.thread.x % ((width[0] / scale[0]) * 4);
  var remainder = this.thread.x % 4;
  return inputBuffer[x * (width[0] * 4) + y * 4 + remainder];
}).setOutput([width * height * 4]);

這是我嘗試過的方法,但是現在奇怪的是,它僅將屏幕的當前寬度作為每個條目的值輸出。

正確的算法是什么? 通常,我習慣於循環遍歷源代碼來執行此類操作,但是在這種情況下,我必須在1維數組中分別處理每個像素的rgba值,而我對如何執行此操作感到困惑。

同樣顯然,我需要用盡可能少的操作來做到這一點。

如果您存儲項目行或列主行,則要視情況而定。 假設你做專業。

每行將是r1 g2 b1 a1 r2 g2 b2 a2 ....然后是下一行,依此類推。 您需要知道圖像有多大(至少每行有多大),我將其稱為N。因此,從行x列y中獲取組件c需要value_pos = x * (N * 4) + y * 4 + c 此處的所有內容均為0索引。 您可以將值用於讀取和寫入,只需在兩者之間更新N,因為它們應該具有不同的大小。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM