Mod

Task

Create a pattern of alternating black and red columns, with 9 columns of each color. Then, hide every third column that is colored red.
创建一个黑色和红色交替出现的图案,红黑两种颜色各有9列。并且,每隔3列隐藏一列。

Requirements

The shader should avoid using branching or conditional statements in its code, and instead rely on the mod and step functions to determine the color of each pixel.
着色器应避免在其代码中使用分支或条件语句,而是依靠mod和step函数来确定每个像素的颜色。

Theory

mod函数用于计算两个数字除法运算的余数。

函数

float mod(float x, float y);

该mod函数有两个参数:

  • •被除数:被除数
  • •除数:被除数除以的数。

该函数返回除法运算的余数。

与模运算符的比较

该mod函数的工作原理与许多编程语言中的模运算符 ( %) 类似。但是,在处理负数的方式上存在一些差异。在 GLSL 中,该mod函数始终返回非负结果。

示例

正数的基本用法:

scss 复制代码
float result = mod(10.0, 3.0); // Result will be 1.0 (10 / 3 has a remainder of 1)

处理负数:

scss 复制代码
float result = mod(-10.0, 3.0); // Result will be 2.0 (-10 / 3 has a remainder of 2)

实际应用

  • 创建重复图案: 通过使用 mod 功能,您可以创建无缝、重复的纹理或图案。

  • 动画: 可以通过将值包装在一定范围内来实现循环动画。

  • 网格系统: 用于创建基于网格的效果或将屏幕划分为多个部分。

Answer

glsl 复制代码
uniform vec2 iResolution;

void main() {
  // Normalized pixel coordinates (from 0 to 1)
  vec2 uv = gl_FragCoord.xy / iResolution.xy;
  
  uv *= 9.0;
  float x = fract(uv.x);
  float hide = 1.0;
  hide = step(1.0, mod(uv.x + 1.0, 3.0)) ;
  x = step(0.5, x * hide);

  gl_FragColor = vec4(x, 0.0, 0.0, 1.0);
}

效果

练习

Mod

最后

如果你觉得这篇文章有用,记得点赞、关注、收藏,学Shader更轻松!!

相关推荐
掘金酱4 小时前
【10.24 特别活动】AI 时代,程序员的新饭碗在哪里?
前端·人工智能·后端
excel4 小时前
多进程环境下使用 PM2 部署 Socket.IO:需要注意什么
前端
IT_陈寒4 小时前
Redis的原子性竟然失效了?记一次分布式锁翻车实录
前端·人工智能·后端
时间的情敌6 小时前
《回顾 2018 前端:Vue2 成熟期,Webpack4 发布,PWA 大火》
前端
Java后端的Ai之路6 小时前
前端技术Vue-09-webpack-vuejs-实战
前端·vue.js·webpack
LMT流氓兔6 小时前
第五单元——第4课:给工具参数加校验
java·前端·算法·ai·langchain
涛涛ing7 小时前
React Compiler正式“Rust化”:你项目里的Babel插件,正在被编译进打包器
前端
迷迭绿7 小时前
Cesium 轨迹回放播放器
前端·javascript·cesium
HolySaga7 小时前
我用 UTS 写了一个三端同构的蓝牙插件(Android / iOS / 鸿蒙 NEXT),把踩过的坑都讲给你听
前端
程序员老赵7 小时前
Docker 部署 XWiki:轻松搭建企业知识库与协作 Wiki
前端·docker·开源