欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 幼教 > shader 案例学习笔记之fract函数

shader 案例学习笔记之fract函数

2025/2/21 3:26:43 来源:https://blog.csdn.net/weixin_41718879/article/details/142166049  浏览:    关键词:shader 案例学习笔记之fract函数
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;
    #endifuniform 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进行颜色插值,实现平滑过度;

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词