跳到主要内容
← Built-In functions

Built-In functions

Tile Pattern

处理器在实际的扫每一个像素,思考不能从uv开始,而是从“每个像素就是一个线程”开始,在某个像素,我希望它画画,希望它执行pattern代码,那么超出的uv值就缺乏意义,我现在只是希望在我定义的grid中,在对应位置的像素/线程上调用pattern代码并给出预期的输出

实时渲染 · 2D 片段 GLSL

第 19 课:Tile Pattern

实现:处理器在实际的扫每一个像素,思考不能从uv开始,而是从“每个像素就是一个线程”开始,在某个像素,我希望它画画,希望它执行pattern代码,那么超出的uv值就缺乏意义,我现在只是希望在我定义的grid中,在对应位置的像素/线程上调用pattern代码并给出预期的输出

实现

uniform vec2 iResolution;

float pattern(vec2 uv) {
  uv = uv * 2.0 - 1.0;
  float t = pow(uv.x * uv.x, 0.3) + pow(uv.y * uv.y, 0.3) - 1.0;
  return step(0.0, t) * t * 10.0 + step(0.2, t);
}

void main() {
  // Normalized pixel coordinates (from 0 to 1)
  vec2 uv = gl_FragCoord.xy / iResolution.xy;
  float columns = 5.0;
  float rows    = 3.0;
  vec2 repeatedUV = fract(uv * vec2(columns, rows));

  gl_FragColor = vec4(pattern(repeatedUV), 0.0, 0.0, 1.0);
}

复盘笔记

  • 处理器在实际的扫每一个像素,思考不能从uv开始,而是从“每个像素就是一个线程”开始,在某个像素,我希望它画画,希望它执行pattern代码,那么超出的uv值就缺乏意义,我现在只是希望在我定义的grid中,在对应位置的像素/线程上调用pattern代码并给出预期的输出