[연재 GLSL 이야기] 치카라를 원하는가… … (제2화) 새로운 힘, 그 이름은 벡터 거리 필드!

4498 단어 GLSLWebGL

벡터 거리 필드




h tps://오. gl / Bkk
 precision mediump float;
 uniform vec2  m;       // mouse
 uniform float t;       // time
 uniform vec2  r;       // resolution
 uniform sampler2D smp; // prev scene

 void main(void){
  vec2 p = (gl_FragCoord.xy * 2.0 - r) / min(r.x, r.y); // 正規化
  vec2 q = normalize(p)*.8-p;

  float l=step(length(q),.03);
  gl_FragColor = vec4(vec3(l), 1.);
 }

먼저 벡터 디탄스 필드를 사용하여 원을 그립니다.
보통 원을 그린 것과 다르지 않네요.

한 번 쓸데없는 변환이 들어갔을 뿐이므로, 당연하네요.
  vec2 q = normalize(p)*.8-p;

이 q는 벡터 거리 필드에서

length 함수를 곱하면
  float l=length(q);

언제든지 거리 필드로 되돌릴 수 있습니다.

그런데, 2D에서는 사용되지 않는 normalize(p)라고 하는 낯선 glsl의 함수가 사용되고 있네요.

원의 거리 필드는
1.-length(p)

하지만 여기에서 원의 벡터 거리 필드를 추측해 보겠습니다.
1. 라는 것은 원래는 p의 단위 벡터로 추측할 수 있으므로 normalize(p)로 추측할 수 있습니다.
length(normalize(p)) = 1.

라는 것은
length(normalize(p)) - length(p) 

길이를 정리하면
length(normalize(p)-p) 

벡터 거리 필드는 길이를 사용하여 스칼라로 만들기 전에
normalize(p)-p

제대로 이끌었습니다!

이것만이라면, 단순히 한 번 쓸데없는 처리가 들어갈 뿐이므로,

서둘러 원형 벡터 거리 필드에 원형 벡터 거리 필드를 올려 봅시다!

다음 번
  • [연재 GLSL 이야기] 치카라를 원하는가……(제3화)극좌표 복제
  • 좋은 웹페이지 즐겨찾기