跳到主要内容
← Built-In functions

Built-In functions

Int/Floor

我这里在第三次迭代找到了答案,这一次我用的if先跑通然后再做的简化,不能被方法的抽象困住了

实时渲染 · 2D 片段 GLSL

第 28 课:Int/Floor

别人的解:我这里在第三次迭代找到了答案,这一次我用的if先跑通然后再做的简化,不能被方法的抽象困住了

别人的解

uniform vec2 iResolution;

vec3 palette[5] = vec3[5](
  vec3(1.0, 0.0, 0.0),
  vec3(0.0, 1.0, 0.0),
  vec3(0.0, 0.0, 1.0),
  vec3(1.0, 1.0, 0.0),
  vec3(0.0, 0.0, 0.0)
);

void main() {
  // Normalized pixel coordinates (from 0 to 1)
  vec2 uv = gl_FragCoord.xy / iResolution.xy;

  float paletteSize = 5.0;
  float positionOnPalette = uv.x * (paletteSize - 1.0);

  int prevColorIndex = int(positionOnPalette);
  int nextColorIndex = prevColorIndex + 1;

  vec3 prevColor = palette[prevColorIndex];
  vec3 nextColor = palette[nextColorIndex];

  vec3 color = mix(prevColor, nextColor, fract(positionOnPalette));

  gl_FragColor = vec4(color, 1.0);
}

复盘笔记

  • 我这里在第三次迭代找到了答案,这一次我用的if先跑通然后再做的简化,不能被方法的抽象困住了