var vShader =` uniform mat4 uProjectionMatrix; uniform mat4 uViewMatrix; uniform mat4 uModelMatrix; uniform mat4 uNormalMatrix; uniform bool uUseNormalMatrix; uniform vec3 uAmbientColor; uniform vec3 uDiffuseColor; uniform vec3 uLightDir; attribute vec3 aXYZ; attribute vec3 aColor; attribute vec3 aNormal; varying vec3 vColor; varying vec3 vXYZ; // Black Hole variables attribute float aBH; varying float vBH; attribute vec3 aBHXYZ; varying vec3 vBHXYZ; attribute float aSR; varying float vSR; attribute float aR; varying float vR; void main () { mat4 mvMatrix = uViewMatrix * uModelMatrix; gl_Position = uProjectionMatrix * mvMatrix * vec4(aXYZ,1); mat4 nMatrix = uUseNormalMatrix?uNormalMatrix:mvMatrix; vColor = uAmbientColor*aColor; vec3 light = normalize(-uLightDir); vec3 normal = vec3(normalize(nMatrix*vec4(aNormal,0))); vColor += aColor*uDiffuseColor*max(dot(normal,light),0.0); vXYZ = (uModelMatrix * vec4(aXYZ,1)).xyz; vBH = aBH; vBHXYZ = aBHXYZ; vSR = aSR; vR = aR; } `; var fShader = ` precision mediump float; varying vec3 vColor; varying vec3 vXYZ; varying float vBH; varying vec3 vBHXYZ; varying float vSR; varying float vR; void main() { if (vBH > 0.5 && distance(vXYZ, vBHXYZ) <= vR) { float dist = distance(vXYZ, vBHXYZ); if (dist < vSR) { gl_FragColor = vec4(0,0,0,1); } else { gl_FragColor = vec4(vColor,0.5); } } else { gl_FragColor = vec4(vColor,1.0); } } `;