glsl로 의사 디스플레이 맵을 프로 시저에 해본다 그 3 파티클 편
소개
우선, 변위 맵으로 만드는 파티클을 만듭니다.
h tps://오. gl/trmpQc
precision mediump float;
uniform vec2 m; // mouse
uniform float t; // time
uniform vec2 r; // resolution
uniform sampler2D smp; // prev scene
highp float rand(vec2 co){
highp float a = 12.9898;
highp float b = 78.233;
highp float c = 43758.5453;
highp float dt= dot(co.xy ,vec2(a,b));
highp float sn= mod(dt,3.14);
return fract(sin(sn) * c);
}
void main(void){
vec2 p = (gl_FragCoord.xy * 2.0 - r) / min(r.x, r.y);
float d;
for(int i=0;i<20;i++){
vec2 q=p;
float pos = mod(t+float(i)*.3+rand(vec2(float(i),float(i))),2.0);
q.y+=1.;
q.y-=pos;
q.x+=sin(pos*5.+float(i))*.4;
d+=clamp(.2-length(q),0.,1.);
}
gl_FragColor = vec4(vec3(d), 1.0);
}
파티클에서 변위 맵을 만들어 봅시다.
precision mediump float;
uniform vec2 m; // mouse
uniform float t; // time
uniform vec2 r; // resolution
uniform sampler2D smp; // prev scene
highp float rand(vec2 co){
highp float a = 12.9898;
highp float b = 78.233;
highp float c = 43758.5453;
highp float dt= dot(co.xy ,vec2(a,b));
highp float sn= mod(dt,3.14);
return fract(sin(sn) * c);
}
void main(void){
vec2 p = (gl_FragCoord.xy * 2.0 - r) / min(r.x, r.y);
float d;
for(int i=0;i<20;i++){
vec2 q=p;
float pos = mod(t+float(i)*.3+rand(vec2(float(i),float(i))),2.0);
q.y+=1.;
q.y-=pos;
q.x+=sin(pos*5.+float(i))*.4;
d+=clamp(.2-length(q),0.,1.);
}
//gl_FragColor = vec4(vec3(d), 1.0);
//return;
p+=d*.1;
p*=8.;
float l = mod(floor(p.x)+floor(p.y),2.0);
gl_FragColor = vec4(vec3(l), 1.0);
}
Reference
이 문제에 관하여(glsl로 의사 디스플레이 맵을 프로 시저에 해본다 그 3 파티클 편), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/7CIT/items/6838f229f5b7bb59b964
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 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
highp float rand(vec2 co){
highp float a = 12.9898;
highp float b = 78.233;
highp float c = 43758.5453;
highp float dt= dot(co.xy ,vec2(a,b));
highp float sn= mod(dt,3.14);
return fract(sin(sn) * c);
}
void main(void){
vec2 p = (gl_FragCoord.xy * 2.0 - r) / min(r.x, r.y);
float d;
for(int i=0;i<20;i++){
vec2 q=p;
float pos = mod(t+float(i)*.3+rand(vec2(float(i),float(i))),2.0);
q.y+=1.;
q.y-=pos;
q.x+=sin(pos*5.+float(i))*.4;
d+=clamp(.2-length(q),0.,1.);
}
gl_FragColor = vec4(vec3(d), 1.0);
}
precision mediump float;
uniform vec2 m; // mouse
uniform float t; // time
uniform vec2 r; // resolution
uniform sampler2D smp; // prev scene
highp float rand(vec2 co){
highp float a = 12.9898;
highp float b = 78.233;
highp float c = 43758.5453;
highp float dt= dot(co.xy ,vec2(a,b));
highp float sn= mod(dt,3.14);
return fract(sin(sn) * c);
}
void main(void){
vec2 p = (gl_FragCoord.xy * 2.0 - r) / min(r.x, r.y);
float d;
for(int i=0;i<20;i++){
vec2 q=p;
float pos = mod(t+float(i)*.3+rand(vec2(float(i),float(i))),2.0);
q.y+=1.;
q.y-=pos;
q.x+=sin(pos*5.+float(i))*.4;
d+=clamp(.2-length(q),0.,1.);
}
//gl_FragColor = vec4(vec3(d), 1.0);
//return;
p+=d*.1;
p*=8.;
float l = mod(floor(p.x)+floor(p.y),2.0);
gl_FragColor = vec4(vec3(l), 1.0);
}
Reference
이 문제에 관하여(glsl로 의사 디스플레이 맵을 프로 시저에 해본다 그 3 파티클 편), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/7CIT/items/6838f229f5b7bb59b964텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)