2

我正在将 16 位图像的 z 堆栈读入 javascript(即图像数组)。我是 webgl 着色器的新手,我在如何遍历数组时遇到问题。

我希望将整个可变长度的图像列表(最多数百个)放到 GPU 上。然后,随着 z-stack 的每次变化,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>

图像的 3 维数组(x、y 和 z)应该被转换为进入 a_fluxes 的一维列表。

如何迭代 z 图像之一的 x 和 y 维度?我是使用循环在顶点着色器中迭代还是需要将像素的所有可能的 x,y 坐标的数组传递给顶点着色器?我真的应该在片段着色器上进行这些计算吗?

4

1 回答 1

0

如果您打算使用 GPU 在它们之间跳转,我认为您最好将纹理放在一起放入图集(将 2d 图像数组作为一个图像)。WebGL 不支持体积纹理,如果支持的话,我建议对每个图像使用一个切片 - 但相反,您可能会最好从更大的合成图像的 UV 空间中切出窗口,其中每个窗口对应到您的子图像之一。

于 2013-02-14T21:58:02.087 回答