Fract - Grid

Task

Write a shader that draws a grid. Each cell in the grid should be 50x50 pixels in size, with a margin of 10 pixels between cells.
编写一个绘制网格的着色器。网格中的每个单元格应为50x50像素大小,单元格之间的间距为10像素。

Requirements

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

Theory

把一个单元格和一个间距做为一个整体, 开始10像素作为间距,[10, 60]作为单元格,宽和高使用同样的处理方式,使用step处理各自区域之间的值。

Answer

glsl 复制代码
void main() {
  float cellSize = 50.0f;
  float margin = 10.0f;
  vec2 cell = gl_FragCoord.xy/(cellSize + margin);
  float x = step(margin / (cellSize + margin), fract(cell.x));
  float y = step(margin / (cellSize + margin), fract(cell.y));

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

效果

练习

Fract - Grid

最后

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

相关推荐
全宝2 分钟前
🔥 你的setTimeout计时器为什么总是不准确?
前端·javascript
晓13132 分钟前
Vue2篇——第二章 Vue从指令修饰符到侦听器的全面解析(重点)
前端·javascript·vue
前端小巷子6 分钟前
单页面应用路由切换动画
前端·vue.js·面试
二川bro12 分钟前
第八篇:交互入门:鼠标拾取物体
前端·交互·threejs
唐璜Taro4 小时前
electron自定义国内镜像
前端·javascript·electron
bilupilu4 小时前
electron 静默安装同时安装完成后自动启动(nsis)
前端·javascript·electron
gnip8 小时前
首页加载、白屏优化方案
前端·javascript
思扬09288 小时前
前端学习日记 - 前端函数防抖详解
前端·学习
gnip8 小时前
包体积,打包速度优化
前端·javascript
正义的大古8 小时前
Vue 3 + TypeScript:深入理解组件引用类型
前端·vue.js·typescript