fract函数
- 可以理解为模1取余,获取一个数的小数部分,如果参数是向量,那就是获取每个向量分量上的小数
案例一
-
#ifdef GL_ES precision mediump float; #endif // 渲染分辨率 uniform vec2 u_resolution; // 程序运行时间 uniform float u_time; void main(){ vec2 st = gl_FragCoord.xy/u_resolution; st *= 3.0; st = fract(st); gl_FragColor = vec4(vec3(st,0.5),1.0); }
- vec2 st = gl_FragCoord.xy/u_resolution;
- 坐标归一化
- st *= 3.0;
- 将坐标空间放大三倍
- st = fract(st);
- 取小数部分,将创建3*3的重复网格
- gl_FragColor = vec4(vec3(st,0.5),1.0);
- 设置最终的片段颜色,处理后的st.x赋值给颜色红色通道,st.y赋值给颜色的绿色通道,0.5赋值给蓝色通道
案例
-
#ifdef GL_ES precision mediump float; #endif uniform vec2 u_resolution; uniform float u_time; void main(){ vec2 st = gl_FragCoord.xy/u_resolution; st *= 3.0; st = fract(st); st -= 0.5; float r = length(st); float color = smoothstep(0.1,0.2 ,r ); gl_FragColor = vec4(vec3(color),1.0); }
- st -= 0.5;
- 将3*3的网格的每个网格的坐标往中心坐标移动;
- float r=length(st);
- 获取二维向量st到原点的距离
- float color = smoothstep(0.1,0.2 ,r );
- 利用smoothstep函数进行颜色插值
- 如果某个片元到原点的距离小于0.1,返回0
- 如果某个片元到原点的距离大于0.2,返回1
- 如果距离大于等于0.1,小于等于0.2,则在0-1进行颜色插值,实现平滑过度;
- 利用smoothstep函数进行颜色插值