当前位置: 首页 > news >正文

shader 案例学习笔记之偏移

效果

代码
#ifdef GL_ES
precision mediump float;
#endifuniform vec2 u_resolution;
uniform float u_time;vec2 brickTile(vec2 _st, float _zoom){_st *= 5.;_st.x += step(1., mod(_st.y,2.0)) * 0.5;return fract(_st);
}float box(vec2 _st, vec2 _size){_size = vec2(0.5)-_size*0.5;vec2 uv = smoothstep(_size,_size+vec2(1e-4),_st);uv *= smoothstep(_size,_size+vec2(1e-4),vec2(1.0)-_st);return uv.x*uv.y;
}void main(void){vec2 st = gl_FragCoord.xy/u_resolution.xy;vec3 color = vec3(0.0);st = brickTile(st,5.0);color = vec3(box(st,vec2(0.9)));gl_FragColor = vec4(color,1.0);
}
解析
  • vec2 st = gl_FragCoord.xy/u_resolution.xy;
    • 坐标归一化
  • vec3 color = vec3(0.0);
    • 声明一个三维向量,每个分量都是0
  • st = brickTile(st,5.0);
    • 调用函数。传递归一化后的坐标系,和一个float值
      • vec2 brickTile(vec2 _st, float _zoom)
        • 声明一个函数名为brickTile,接受两个参数
        • _st *= 5.;
          • _st 自身乘以 5.0,相当于对 _st 的所有分量进行放大 5 倍
        • _st.x += step(1., mod(_st.y,2.0)) * 0.5;
          • mod(_st.y,2.0) 
            • mod(_st.y,2.0)返回[0,2)之间的值。
          • 经过step后
            • 返回[0,1]的值
          • step(1., mod(_st.y,2.0)) * 0.5;
            • 将上述step函数的结果乘以0.5
          • 分析图
            • 从分析图中可以看出只有st.y在[1,2)和[3,4)中经过step操作后会返回1,从而st.x 向右偏移了0.5,也印证了效果图的偏移

http://www.mrgr.cn/news/25509.html

相关文章:

  • 【时时三省】c语言例题----华为机试题<进制转换>
  • Java11环境安装(Windows)
  • 学习Vue3的第五天
  • 使用dnSpy调试服务端IIS部署的WebService的程序集
  • Java重修笔记 第五十四天 坦克大战(四)多线程基础
  • 大模型微调 - 用PEFT来配置和应用 LoRA 微调
  • C语言初识编译和链接
  • [M二分答案] lc2576. 求出最多标记下标(二分答案+同向双指针+贪心)
  • 操作系统 ---- 处理机调度
  • 配环境时的一些记录
  • 【Colab代码调试】End-to-end reproducible AI pipelines in radiology using the cloud
  • Vue: 创建vue项目
  • Win32编程:创建属于你的第一个窗口
  • 贪心算法day30|452. 用最少数量的箭引爆气球(排序+多重叠的处理)、435. 无重叠区间(去除哪个才是最优)、763. 划分字母区间(类阿斯克码换算)
  • 《JavaEE进阶》----16.<Mybatis简介、操作步骤、相关配置>
  • 大模型干货 | 如何使用Unsloth框架对Llama进行微调?
  • 小众创新组合!LightGBM+BO-Transformer-LSTM多变量回归交通流量预测(Matlab)
  • 将一个链表前后交替插入,得到一个新链表
  • 2. geoserver 发布postgis数据
  • 为工程师构建生成式 AI 应用程序