gradient.glsl 1016 Bytes
vec3 grad(vec3 p, float d, sampler3D t)
{
	
	vec3 px = vec3(p.x-d, p.y, p.z);
	vec3 py = vec3(p.x, p.y-d, p.z);
	vec3 pz = vec3(p.x, p.y, p.z-d);
	
	float pVal = texture(t, p).g;
	
	float dx = pVal - texture(t, px).r;
	float dy = pVal - texture(t, py).r;
	float dz = pVal - texture(t, pz).r;
	
	return vec3(dx, dy, dz);
}

vec4 computeColor(vec3 p)
{
	//compute the gradient
	vec3 gradient = grad(p, 0.01, texIntensity);
	vec4 color = vec4(0.0, 0.0, 0.0, 0.0);
	float gradmag = length(gradient);
	
	//compute the color based on the gradient
	
	if(gradmag == 0.0)
		return vec4(0.0, 0.0, 0.0, 0.0);
		
	color.rgb = abs(normalize(gradient));
	color.a = gradmag;
	
	//compute lighting
	vec3 lightDir = -normalize(diffuse0);
	float light0 = dot(lightDir, gradient);
	if(light0 < 0) light0 = 0;
	
	lightDir = -normalize(diffuse1);
	float light1 = dot(lightDir, gradient);
	if(light1 < 0) light1 = 0;
	
	float ambient = 0.5;
	
	float lighting = light0 + light1 + ambient;
	color.rgb = color.rgb*lighting;
	return color;

}