#ifdef GL_ES
precision lowp float;
#endif
varying vec4 v_fragmentColor;
varying vec2 v_texCoord;
varying vec2 v_texCoordBlendMap;
varying vec3 v_normal;
varying vec4 v_FogColor;
varying float v_distance;
uniform sampler2D u_texture;
uniform sampler2D u_tex1;
uniform sampler2D u_tex2;
uniform sampler2D u_tex3;
void main()
{
vec4 colour1 = texture2D(u_texture, v_texCoord);
vec4 colour2 = texture2D(u_tex1, v_texCoord);
float blendVal = texture2D(u_tex2, v_texCoordBlendMap).r;
float fValue = 1.0 - blendVal;
vec4 texColor = colour1*fValue + colour2*blendVal;
texColor.a = 1;
v_fragmentColor.a = 1;
vec4 finalclr = texColor * v_fragmentColor;
if(finalclr.a == 1) //why not it equal 1
{
gl_FragColor=vec4(1,0,0,1);
}
else
{
gl_FragColor=vec4(1,1,1,1);
}
}
嗨,大家好,很抱歉在手机上问这个。我在本周调试搅拌机脚本时感到困惑。上面的ps脚本它用于模拟两个RGBA。但是为了测试和简化,我有意地将两个Alpha通道写成1.0并期望输出的红色。但是frag颜色输出是白色而不是红色。怎么会这样?
答案 0 :(得分:1)
尝试使用以下方法缩小范围:
finalclr.a = texColor.a * v_fragmentColor.a;
很可能就是这样:
v_fragmentColor
不可写。precision highp
精度说明符如果归结为精确问题,你无法解决,请使用以下内容比较浮动a
和b
的差异:
if (abs(a - b) < EPSILON) // absolute value of difference
{
// consider them equal...
}
其中EPSILON
是一个小值。