场景:DissolveEffect(溶解)
阅读笔记:add by the3sStudio,如果错误欢迎指教。
致谢:
感谢大掌教 提供demo,大掌教公开 QQ群号: 704391772
--基础准备
这篇很多三角函数的运用,自行百度
vec4 src_color = texture2D(CC_Texture0, v_texCoord).rgba;
CC_Texture0 是一个采样器,在load shader的时候,引擎会预先把这些uniform变量给加载进来,本处就是 你在场景里面看到的那背景图。
--基础结束
流光篇
fluxay_frag
总的说,他是渲染每一帧的时候,去改变当前纹理坐标那些触发条件的 纹素
tan 是一个周期函数,所以你会每隔一段时间就会看到
现在理解: if( v_texCoord[0] < (start - offset * v_texCoord[1]) && v_texCoord[0] > (start - offset * v_texCoord[1] - width))
float start = tan(time/1.414); //流光的起始x坐标,首先这是一个 负无穷到正无穷的值,他有一段可视区间(0,1),
float offset = 0.0; //偏移值 (调整该值改变流光的倾斜程度,调整成0 ,那就能理解上面那个条件了,每一帧会计算所有顶点,把满足要求的顶点进行着色)
还不能理解就带几个参数进去算,然后打点看下这些点是怎么分布的
fluxay_frag_s 这个我没有很好的理解,可以互相学习
重点:
float distance = abs(v_texCoord[0]+v_texCoord[1]-tan(time))/1.414; //每一帧 同意顶点计算的值都不一样,一帧之内各个不同顶点的值也不一样,那distance是什么呢?
float alpha = sample[3]*texColor[3]; //保持原来的 a 值不变
//要么取 0 要么取 大于 0 ,0 不可见,大于0可见
同样的,当你把 width 改成 1,这个时候,distance 其实就可以变成 1- distance。
那么 distance 其实就是 计算 当前 时间周期是否在 (0,1)之内,那这样说不是 只需要用 v_texCoord[0] - tan(time)就可以了吗。
去掉 v_texCoord[1] 试试看,是一个竖直的线 ?结果和原先的有区别.....
这个时候 提一个函数 f(x) = ax + b,可以想见了吗,如果去掉 a,那就是一条平行于 y轴的直线。如果有一个斜率,那就是斜线了。这个地方 v_texCoord[1] 其实就是斜率。
有点难理解,思索下,可能有更好的方式,欢迎指教
distance = 1.0-(1.0/width)*distance;
distance = max(distance, 0.0);
接下来就很好理解了
波光特效
我理解不了,求指教。
creator sharder 教程(二)
最新推荐文章于 2024-08-27 15:57:21 发布