forked from goliath/shadermeh
66 lines
1.3 KiB
GLSL
66 lines
1.3 KiB
GLSL
|
vec3 palette(float d){
|
||
|
return mix(vec3(0.2,0.7,0.9),vec3(1.,0.,1.),d);
|
||
|
}
|
||
|
|
||
|
vec2 rotate(vec2 p,float a){
|
||
|
float c = cos(a);
|
||
|
float s = sin(a);
|
||
|
return p*mat2(c,s,-s,c);
|
||
|
}
|
||
|
|
||
|
float map(vec3 p){
|
||
|
for( int i = 0; i<8; ++i){
|
||
|
float t = iTime*0.2;
|
||
|
p.xz =rotate(p.xz,t);
|
||
|
p.xy =rotate(p.xy,t*1.89);
|
||
|
p.xz = abs(p.xz);
|
||
|
p.xz-=.5;
|
||
|
}
|
||
|
return dot(sign(p),p)/5.;
|
||
|
}
|
||
|
|
||
|
vec4 rm (vec3 ro, vec3 rd){
|
||
|
float t = 0.;
|
||
|
vec3 col = vec3(0.);
|
||
|
float d;
|
||
|
for(float i =0.; i<64.; i++){
|
||
|
vec3 p = ro + rd*t;
|
||
|
d = map(p)*.5;
|
||
|
if(d<0.02){
|
||
|
break;
|
||
|
}
|
||
|
if(d>100.){
|
||
|
break;
|
||
|
}
|
||
|
//col+=vec3(0.6,0.8,0.8)/(400.*(d));
|
||
|
col+=palette(length(p)*.1)/(400.*(d));
|
||
|
t+=d;
|
||
|
}
|
||
|
return vec4(col,1./(d*100.));
|
||
|
}
|
||
|
void mainImage( out vec4 fragColor, in vec2 fragCoord )
|
||
|
{
|
||
|
vec2 uv = (fragCoord-(iResolution.xy/2.))/iResolution.x;
|
||
|
vec3 ro = vec3(0.,0.,-50.);
|
||
|
ro.xz = rotate(ro.xz,iTime);
|
||
|
vec3 cf = normalize(-ro);
|
||
|
vec3 cs = normalize(cross(cf,vec3(0.,1.,0.)));
|
||
|
vec3 cu = normalize(cross(cf,cs));
|
||
|
|
||
|
vec3 uuv = ro+cf*3. + uv.x*cs + uv.y*cu;
|
||
|
|
||
|
vec3 rd = normalize(uuv-ro);
|
||
|
|
||
|
vec4 col = rm(ro,rd);
|
||
|
|
||
|
|
||
|
fragColor = col;
|
||
|
}
|
||
|
|
||
|
/** SHADERDATA
|
||
|
{
|
||
|
"title": "fractal pyramid",
|
||
|
"description": "",
|
||
|
"model": "car"
|
||
|
}
|
||
|
*/
|