将shader用到animation上时,不知道为什么总是会闪烁一下。
引擎版本1.9.3
代码:
TestWaveLight.zip (1.1 MB)
我将FSHADER_SOURCE改成
#ifdef GL_ES
precision lowp float;
#endif
uniform sampler2D u_lightTexture;
uniform vec2 u_animLight;
uniform vec4 u_suv;
varying vec2 v_texCoord;
varying vec4 v_fragmentColor;
float w = 0.078125;
float h = 0.169027845;
void mainImage(out vec4 fragColor) {
float hw = (w - u_suv[2]) / 2.0;
float hh = (h - u_suv[3]) / 2.0;
vec2 uv = v_texCoord;
// vec2 luv = vec2((uv.x - u_suv[0]) / u_suv[2], (uv.y - u_suv[1]) / u_suv[3]);
// vec4 randValue = texture2D(u_lightTexture, luv + u_animLight.xy);
// vec4 tex = texture2D(CC_Texture0, v_texCoord);
// float alpha = tex[3];
// tex[0] = tex[0] + randValue[0] * alpha;
// tex[1] = tex[1] + randValue[1] * alpha;
// tex[2] = tex[2] + randValue[2] * alpha;
// fragColor = v_fragmentColor * tex;
if(uv.x - u_suv[0] < u_suv[2] / 2.0) {
fragColor = vec4(1.0, 0.0, 0.0, 1.0);
// fragColor = texture2D(CC_Texture0, v_texCoord);
} else {
// fragColor = vec4(1.0, 1.0, 0.0, 1.0);
}
}
void main() {
mainImage(gl_FragColor);
}
理论上的效果应该是只会显示图片左边部分,但是在使用WebGL Inspector调试的时候发现,有那么一帧会出现这样的情况。
动图效果:
也就是一说有那么一帧,鱼的图片都会显示出来,那就是说我的uv坐标给的有问题,但是我上传到WebGL的uv值是引擎自己算的,理论上是没有问题的。可实际情况是有一帧算出来的值是有问题的。问题还是出现在uv值,我大概推测是某个纹理的uv和顶点坐标不对应导致的。但是也只是推测,我目前不知道该从哪个地方去验证。
希望高手能指点下迷津,谢谢!