如果我有这样的矩阵:
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
可能有用,但我不知道如何。
===注意=== 我需要这样做,因为客户端为这个矩阵播种,并希望透明图像的某个位置,我无法更改客户端的代码。
答案 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个浮点数。
使用纹理而不是数组会更有效,因为它允许您应用片段的插值(纹理过滤)。