如何通过片段着色器透明WebGL对象?

时间:2013-07-29 04:43:41

标签: webgl

如果我有这样的矩阵:

1 1 1 0 0 1
1 1 1 0 0 1
1 1 0 0 0 1
1 0 0 0 0 1
1 1 0 0 0 1
1 1 1 0 0 1

它表示6x6像素图像的alpha值,我想知道是否可以在0 s位置透明此图像?

我注意到gl_FragColor可能有用,但我不知道如何。

===注意=== 我需要这样做,因为客户端为这个矩阵播种,并希望透明图像的某个位置,我无法更改客户端的代码。

1 个答案:

答案 0 :(得分:1)

gl_FragColor期望vec4为rgba,其中第4个浮点数是Alpha通道,并且正在接受alpha值。
因此,在片段着色器中,首先需要根据纹理坐标获取像素。如果你从客户端获得的alpha矩阵是纹理,那么只需使用texture2D,如果它是浮点数的单维数组,那么你必须根据纹理坐标提取它自己。
假设2d数组的宽度和高度为6x6:

float alpha = alphaMat[floor(uv.y * 6) * 6 + floor(uv.x * 6)];

在这里,您可以根据alpha数组的宽度和高度将UV转换为整数。 alphaMat - 是包含alpha值的单维数组,如果是6x6 map,它应该有36个浮点数。

使用纹理而不是数组会更有效,因为它允许您应用片段的插值(纹理过滤)。