glsl 마스크 요약
8068 단어 GLSL
개요
glsl에서 마스크 방법을 요약합니다.
glsl의 마스크는 거리 필드에서 만든 모양을 곱하는 것이 기본입니다.
수시로 추가하겠습니다.
가면
방사형 마스크
? 마크 등, 주로 극좌표계의 도형의 일부를 각도를 지정해 주었을 때에 사용할 수 있습니다.
const float PI = 3.141592653589793;
const float PI2 = PI * 2.;
/*
vec2 p 中心の座標
float a1 開始角度(-1.~1.)
float a2 マスクする角度(0.~1.)
*/
float maskRadial(vec2 p,float a1,float a2){
float a = fract(atan(p.y,p.x)/PI2+1.-a1);
return step(a,a2);
}
방사형 마스크
? 마크 등, 주로 극좌표계의 도형의 일부를 각도를 지정해 주었을 때에 사용할 수 있습니다.
const float PI = 3.141592653589793;
const float PI2 = PI * 2.;
/*
vec2 p 中心の座標
float a1 開始角度(-1.~1.)
float a2 マスクする角度(0.~1.)
*/
float maskRadial(vec2 p,float a1,float a2){
float a = fract(atan(p.y,p.x)/PI2+1.-a1);
return step(a,a2);
}
범위 마스크
#define between(x,min,max) step(min,x)*step(x,max)
glsl 듀플리케이트로 패턴을 만드는 것은 간단하지만, 그대로는 무한히 복제되어 버린다.
패턴의 횟수를 지정하고 싶을 수 있다.
이 경우, 마스크를 병용함으로써 패턴의 횟수를 제한할 수 있다.
가장 사용하는 것으로 보이는 마스크. 응용범위는 넓은
직사각형 마스크
도형의 일부만을 직사각형으로 빼내고 싶을 때에 사용한다.
정사각형 및 직사각형 모양을 사용해도 동일
#define between(x,min,max) step(min,x)*step(x,max)
float maskRect(vec2 p,vec2 p1,vec2 p2){
return between(p.x,p1.x,p2.x)*between(p.y,p1.y,p2.y);
}
알파 마스크
원형 알파 마스크 (비네트)
거리 필드 유형에 따라 거는 방법이 달라집니다.
precision mediump float;
uniform vec2 m; // mouse
uniform float t; // time
uniform vec2 r; // resolution
uniform sampler2D smp; // prev scene
float pCheckers(vec2 p,float n){vec2 q=p*n;return mod(floor(q.x)+floor(q.y),2.0);}
void main(void){
vec2 p = (gl_FragCoord.xy * 2.0 - r) / min(r.x, r.y);
float l = pCheckers(p,5.);
l*=1.-length(p);
//l*=1.-dot(p,p);
gl_FragColor = vec4(vec3(l), 1.0);
}
길이(p)
h tps://오. gl / M로 s1
dot(p,p)
h tps://오. gl/P7GRH1
Reference
이 문제에 관하여(glsl 마스크 요약), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/7CIT/items/64c16cd1500fc25fee6d
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
precision mediump float;
uniform vec2 m; // mouse
uniform float t; // time
uniform vec2 r; // resolution
uniform sampler2D smp; // prev scene
float pCheckers(vec2 p,float n){vec2 q=p*n;return mod(floor(q.x)+floor(q.y),2.0);}
void main(void){
vec2 p = (gl_FragCoord.xy * 2.0 - r) / min(r.x, r.y);
float l = pCheckers(p,5.);
l*=1.-length(p);
//l*=1.-dot(p,p);
gl_FragColor = vec4(vec3(l), 1.0);
}
Reference
이 문제에 관하여(glsl 마스크 요약), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/7CIT/items/64c16cd1500fc25fee6d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)