Thanks Gigatron! I tried it and it doesn't seem to be working with transparent sprites. Actually it kind of doesn't seem to work at all, a sphere is created but it doesn't seem to be mapping the sprite in 3D around it like it should be.
[quote:22czvhr5]//////////////////////////////////
//GlslSphere effect
//webgl sphere mapping for chrisbrobs .. Gigatron
//
precision mediump float;
varying mediump vec2 vTex;
uniform lowp sampler2D samplerFront;
uniform mediump float pixelWidth;
uniform mediump float pixelHeight;
vec2 iResolution = vec2( 1./pixelWidth, 1./pixelHeight);
uniform float seconds;
uniform float RotSpeed,xx,yy,zz;
#define PI 3.14159265358979
#define rotate(point,axiss,angle) vec3 axis = normalize(axiss);float s = sin(angle);float c = cos(angle);float oc = 1.0 - c; mat4 rot = mat4(oc * axis.x * axis.x + c,oc * axis.x * axis.y - axis.z * s, oc * axis.z * axis.x + axis.y * s, 0.0,oc * axis.x * axis.y + axis.z * s, oc * axis.y * axis.y + c,oc * axis.y * axis.z - axis.x * s, 0.0,oc * axis.z * axis.x - axis.y * s, oc * axis.y * axis.z + axis.x * s, oc * axis.z * axis.z + c,0.0, 0.0,0.0,0.0,1.0); vec3 rotpoint = (vec4(point,1.)*rot).xyz
vec2 uv (vec3 p) {
float x = p.x;
float y = p.y;
float z = p.z;
float u = atan(x, z) / (2. * PI) + .5;
float v = asin(y) / (PI) + .5;
return vec2(u,v);
}
float map(vec3 r) {
rotate(r,vec3(0,1,0),seconds*RotSpeed);
return length(r)-(3.);
}
vec3 march(vec3 ro, vec3 rd ) {
vec3 r=ro;
vec3 bg=vec3(0.,0.,0.);
for (int i = 0; i < 32; i++) {
float df = map(r);
vec3 nr = normalize(r);
if (df<.01) {
rotate(nr,vec3(yy,xx,zz),seconds*RotSpeed);
vec3 val = texture2D(samplerFront,uv(normalize(rotpoint))).rgb;
return vec3(val);
}
r+=rd*df;
}
// return vec3(vec3(0, rd)*-2.0);
// to do bg color mix !
return vec3(bg);
}
void main(void)
{
vec2 uv = vTex-vec2(0.0,-0.25);
vec3 bgcol=vec3(0.,0.0,0.0);
uv.x =1.-uv.x;
uv.y *=0.65;
vec3 mc = march(vec3(0,0,-20),vec3(uv-.5,1.0) );
if (mc.g>0.05) gl_FragColor = vec4( mc, 1.0);
else
gl_FragColor =vec4(bgcol,0.0);
//fragColor = mix(texcolor, color, color.a*alpha);
}
This one works well with transparent sprites but if I change speed to 0 it turns invisible (and yet still somehow rotates). If there only was a way to make this one fully controllable in speed + x/y/z rotation