跳到主要内容
← Built-In functions

Built-In functions

向量标准化

normalize 等价 v/length(v)

实时渲染 · 2D 片段 GLSL

第 33 课:向量标准化

我的解:normalize 等价 v/length(v)

我的解

uniform vec2 iResolution;
const float PI = 3.14;

void main() {
  vec2 uv = gl_FragCoord.xy / iResolution.xy;
  vec2 o1 = vec2(0.25,0.5);
  vec2 o2 = vec2(0.75,0.5);

  vec2 dxdy1 = uv - vec2(0.25,0.5);
  vec2 dxdy2 = uv - vec2(0.75,0.5);

  vec2 N1 = dxdy1/length(dxdy1);
  vec2 N2 = dxdy2/length(dxdy2);

  float zone = step(0.5, uv.x);
  float angle = zone == 0.0 ? N1.x:N2.y;
  gl_FragColor = vec4(angle*vec3(1.0), 1.0);
}

复盘笔记

  • normalize 等价 v/length(v)
  • vector normalize,v = (x, y), 其中根据数学定义,x=是cos(theta), y是sin(theta)。
  • 当然想暴力破解:可以写成
  • float N3 = cos(atan(dxdy1.y, dxdy1.x));