
#ifdef GL_ES
precision mediump float;
#endif
#define E .001
uniform vec2 u_resolution;
uniform vec2 u_mouse;
uniform float u_time;
uniform sampler2D globe; // <https://i.imgur.com/ziNRARt.jpg>
#define MATERIAL_SHP 1.
#define MATERIAL_PLN 2.
#define MATERIAL_GLOBE 3.
mat2 rot(float a){float s=sin(a),c=cos(a);return mat2(c,-s,s,c);}
vec2 dist(vec3 p){
//p.z-=5.;
vec2 sph = vec2(length(p)-1., MATERIAL_GLOBE);
return sph;
}
vec3 norm(vec3 p){
vec2 e=vec2(E,0.);
float dp=dist(p).x;
return normalize(vec3(
dp-dist(p-e.xyy).x,
dp-dist(p-e.yxy).x,
dp-dist(p-e.yyx).x
));
}
void main() {
vec2 dd, uv = (gl_FragCoord.xy*2.-u_resolution.xy)/min(u_resolution.x,u_resolution.y);
float d=0.,e,glow=0.;
vec3 col=vec3(0.),p,rd=normalize(vec3(uv,1.)),ro=vec3(0.,0.,-2.),n;
rd.zx*=rot(u_mouse.x/10.);
ro.zx*=rot(u_mouse.x/10.);
;
//for(int r=0;r<1;r++){
for(int i=0;i<=99;i++){
p=rd*d+ro;
dd = dist(p);
d+=e=dd.x;
if(e<E)break;
}
if(d<999.){
if(dd.y==MATERIAL_GLOBE){
col = texture2D(globe,p.xy).rgb;
//col -= smoothstep(0.,6.,d);
//break;
}
}
//rd=reflect(rd, norm(p));
//ro=p+rd*.02;
//d=0.;
//}
gl_FragColor = vec4(col, 1.);
}

#ifdef GL_ES
precision mediump float;
#endif
#define E .001
uniform vec2 u_resolution;
uniform vec2 u_mouse;
uniform float u_time;
uniform sampler2D globe; // <https://i.imgur.com/ziNRARt.jpg>
#define MATERIAL_SHP 1.
#define MATERIAL_PLN 2.
#define MATERIAL_GLOBE 3.
#define PI 3.14159265
mat2 rot(float a){float s=sin(a),c=cos(a);return mat2(c,-s,s,c);}
vec2 dist(vec3 p){
//p.z-=5.;
vec2 sph = vec2(length(p)-1., MATERIAL_GLOBE);
return sph;
}
vec3 norm(vec3 p){
vec2 e=vec2(E,0.);
float dp=dist(p).x;
return normalize(vec3(
dp-dist(p-e.xyy).x,
dp-dist(p-e.yxy).x,
dp-dist(p-e.yyx).x
));
}
void main() {
vec2 dd, uv = (gl_FragCoord.xy*2.-u_resolution.xy)/min(u_resolution.x,u_resolution.y);
float d=0.,e,glow=0.;
vec3 col=vec3(0.),p,rd=normalize(vec3(uv,1.)),ro=vec3(0.,0.,-2.),n;
rd.zy*=rot(u_mouse.x/100.);
ro.zy*=rot(u_mouse.x/100.);
;
//for(int r=0;r<1;r++){
for(int i=0;i<=99;i++){
p=rd*d+ro;
dd = dist(p);
d+=e=dd.x;
if(e<E)break;
}
if(d<999.){
if(dd.y==MATERIAL_GLOBE){
float lat = p.y; // [-1,1]
lat*=.5; // [-.5,.5]
lat+=.5; // [0,1]
float lon = (atan(p.z,p.x)+PI)/(2.*PI);
col = texture2D(globe,vec2(lon, lat)).rgb;
//col -= smoothstep(0.,6.,d);
//break;
}
}
//rd=reflect(rd, norm(p));
//ro=p+rd*.02;
//d=0.;
//}
gl_FragColor = vec4(col, 1.);
}

#ifdef GL_ES
precision mediump float;
#endif
#define E .001
uniform vec2 u_resolution;
uniform vec2 u_mouse;
uniform float u_time;
uniform sampler2D globe; // <https://i.imgur.com/ziNRARt.jpg>
#define MATERIAL_SHP 1.
#define MATERIAL_PLN 2.
#define MATERIAL_GLOBE 3.
#define PI 3.14159265
mat2 rot(float a){float s=sin(a),c=cos(a);return mat2(c,-s,s,c);}
vec2 dist(vec3 p){
for(float i=0.;i<2.;i++){
float lat = p.y; // [-1,1]
lat*=.5; // [-.5,.5]
lat+=.5; // [0,1]
float lon = (atan(p.z,p.x)+i*10.*u_time/10.+PI)/(2.*PI);
lon = fract(lon);
p+=texture2D(globe,vec2(lon, lat)).r*.05;
}
vec2 sph = vec2((length(p)-1.)*.3, MATERIAL_GLOBE);
return sph;
}
vec3 norm(vec3 p){
vec2 e=vec2(E,0.);
float dp=dist(p).x;
return normalize(vec3(
dp-dist(p-e.xyy).x,
dp-dist(p-e.yxy).x,
dp-dist(p-e.yyx).x
));
}
void main() {
vec2 dd, uv = (gl_FragCoord.xy*2.-u_resolution.xy)/min(u_resolution.x,u_resolution.y);
float d=0.,e,glow=0.;
vec3 col=vec3(0.),p,rd=normalize(vec3(uv,1.)),ro=vec3(0.,0.,-2.*u_mouse.y/u_resolution.y),n;
rd.zy*=rot(u_mouse.x/100.);
ro.zy*=rot(u_mouse.x/100.);
;
//for(int r=0;r<1;r++){
for(int i=0;i<=99;i++){
p=rd*d+ro;
dd = dist(p);
d+=e=dd.x;
if(e<E)break;
}
if(d<999.){
if(dd.y==MATERIAL_GLOBE){
float lat = p.y; // [-1,1]
lat*=.5; // [-.5,.5]
lat+=.5; // [0,1]
float lon = (atan(p.z,p.x)+PI)/(2.*PI);
col = texture2D(globe,vec2(lon, lat)).rgb;
//col -= smoothstep(0.,6.,d);
//break;
}
}
//rd=reflect(rd, norm(p));
//ro=p+rd*.02;
//d=0.;
//}
gl_FragColor = vec4(col, 1.);
}

#ifdef GL_ES
precision mediump float;
#endif
#define E .001
uniform vec2 u_resolution;
uniform vec2 u_mouse;
uniform float u_time;
uniform sampler2D globe; // <https://i.imgur.com/ziNRARt.jpg>
#define MATERIAL_SHP 1.
#define MATERIAL_PLN 2.
#define MATERIAL_GLOBE 3.
#define PI 3.14159265
mat2 rot(float a){float s=sin(a),c=cos(a);return mat2(c,-s,s,c);}
vec2 dist(vec3 p){
for(float i=0.;i<2.;i++){
float lat = p.y; // [-1,1]
lat*=.5; // [-.5,.5]
lat+=.5; // [0,1]
float lon = (atan(p.z,p.x)+i*10.*u_time/100.+PI)/(2.*PI);
lon = fract(lon);
p+=texture2D(globe,vec2(lon, lat)).r*.01;
}
vec2 sph = vec2((length(p)-1.)*.3, MATERIAL_GLOBE);
return sph;
}
vec3 norm(vec3 p){
vec2 e=vec2(E,0.);
float dp=dist(p).x;
return normalize(vec3(
dp-dist(p-e.xyy).x,
dp-dist(p-e.yxy).x,
dp-dist(p-e.yyx).x
));
}
void main() {
vec2 dd, uv = (gl_FragCoord.xy*2.-u_resolution.xy)/min(u_resolution.x,u_resolution.y);
float d=0.,e,glow=0.;
vec3 col=vec3(0.),p,rd=normalize(vec3(uv,1.)),ro=vec3(0.,0.,-2.),n;
rd.zy*=rot(u_mouse.x/100.);
ro.zy*=rot(u_mouse.x/100.);
float d_min = 999.;
//for(int r=0;r<1;r++){
for(int i=0;i<=99;i++){
p=rd*d+ro;
dd = dist(p);
d+=e=dd.x;
if(e<d_min)d_min=e;
if(e<E)break;
}
if(d<2.){
if(dd.y==MATERIAL_GLOBE){
//float lat = p.y; // [-1,1]
//lat*=.5; // [-.5,.5]
//lat+=.5; // [0,1]
//float lon = (atan(p.z,p.x)+PI)/(2.*PI);
//col = texture2D(globe,vec2(lon, lat)).rgb;
float t = sin(u_time)*.01;
col = vec3(smoothstep(1.+t-.02, 1.+t+.04, length(p)));
col *= vec3(sin(u_time),sin(u_time+PI*1./3.),sin(u_time*PI*2./3.))*.5+.5;
//break;
}
}
else{
float glow = .05/pow(d_min,.5);
float t = u_time-length(uv*.5)*10.-PI*1.;
col=vec3(sin(t),sin(t+PI*1./3.),sin(t*PI*2./3.))*.5+.5;
col *= glow;
}
//rd=reflect(rd, norm(p));
//ro=p+rd*.02;
//d=0.;
//}
gl_FragColor = vec4(col, 1.);
}