# 坐标操作

  • out vec4 fragColor:这是输出参数,表示最终渲染到屏幕上的颜色
  • in vec2 fragCoord:这是输入参数,表示当前像素在屏幕上的原始坐标
  • iResolution.xy 是渲染目标(通常是窗口或帧缓冲区)的分辨率,表示屏幕的宽度和高度。
  • length() 函数来计算向量(vec2/vec3/vec4)的的欧几里得长度

# 简单的颜色变化

将当前像素的颜色设置为基于其在屏幕上的位置

void mainImage (out vec4 fragColor, in vec2 fragCoord){
    vec2 uv = fragCoord / iResolution.xy;
    fragColor = vec4(uv, 0, 1.); // rgba
}

# 画个圆

在屏幕上绘制一个半径为 0.3 的白色圆形

void mainImage (out vec4 fragColor, in vec2 fragCoord){
    vec2 uv = fragCoord / iResolution.xy - vec2(.5);
    float c = 0.0;
    float r = 0.3;
    // 判断像素是否在圆形区域内
    if (length(uv) < r) {
      c = 1.0;
    }
    fragColor = vec4(vec3(c), 1.0); // rgba
}

# 画个正圆

void mainImage (out vec4 fragColor, in vec2 fragCoord) {
    // 将像素坐标平移到屏幕中心,并确保圆形不会因为宽高比不同而变形
    vec2 uv = (fragCoord - 0.5 * iResolution.xy) / min(iResolution.x,iResolution.y);
    float c = 0.0;
    float r = 0.3;
    if (length(uv) < r){
      c = 1.0;
    }
    fragColor = vec4(vec3(c),1.0); // rgba
}