2013-02-13 37 views
2

我正在讀取一個由16位圖像組成的z-stack(即圖像數組)。我是webgl着色器的新手,我遇到了如何遍歷數組的問題。我在哪個webgl着色器將數組轉換爲圖像

我希望將整個可變長度的圖像列表(最多可達數百個)放到GPU上。然後,隨着z堆棧中的每次更改,gpu都將渲染新圖像。目前,我有以下:

<script id="shader-vertex" type="x-shader/x-vertex"> 
attribute float a_fluxes; 
varying float v_flux; 
attribute vec2 a_position; 
uniform vec2 u_resolution; 

void main() { 
    vec2 zeroToOne = a_position/u_resolution; 
    gl_Position = vec4((zeroToOne * 2.0 - 1.0) * vec2(1, -1), 0, 1); 
    v_flux = a_fluxes/256.; 
} 
</script> 
<script id="shader-fragment" type="x-shader/x-fragment"> 
precision highp float; 
varying float v_flux; 

void main() { 
    gl_FragColor = vec4(v_flux, v_flux, v_flux, 1); 
} 
</script> 

圖像(X,Y,和z)的3維陣列應該被轉換成一維列表進入a_fluxes。

如何迭代z圖像之一的x和y尺寸?我是否使用循環迭代頂點着色器,還是需要將所有可能的像素x,y座標數組傳遞給頂點着色器?我真的應該在片段着色器上進行這些計算嗎?

+0

您不會遍歷x,y座標,而且您不希望:否則,該工作將如何在GPU單元之間分配?循環並不總是容易分開。 OpenGL將這些工作劃分爲單元併爲您迭代。至於如何最好地處理這種情況,那麼這超出了我目前的新手經驗。 – JayC 2013-02-14 05:32:58

回答

0

如果您打算使用GPU在它們之間跳轉,那麼我認爲您可以將紋理放在一起放入圖集(圖像的二維數組作爲一個圖像)。 WebGL不支持卷紋理,如果它建議我使用每張圖片的切片 - 但相反,您可能最好從較大合成圖像的UV空間中切出窗口,其中每個窗口對應到您的一個子圖像。