varying vec3 q_tilde;
varying vec3 inv_T_square_v;
varying vec3 inv_T_square_e_c;
varying vec4 e_clip;
varying vec4 V_clip;
varying vec3 h0;
varying vec3 l0;
varying vec3 h1;
varying vec3 l1;
varying vec4 a;

void main()
{
	float q_tilde_squared_length = dot(q_tilde.xy,q_tilde.xy);
	if (q_tilde_squared_length > 1.0)
		discard;
	float lambda = 1.0/(1.0+q_tilde.z*sqrt(1.0-q_tilde_squared_length));
	vec3 n = normalize(inv_T_square_e_c + lambda * inv_T_square_v);

	gl_FragColor = a;
	float ldotn = dot(n,l0);
	if (ldotn > 0.0) {
		gl_FragColor += 
			ldotn*gl_FrontLightProduct[0].diffuse+
			pow(max(dot(n,normalize(h0)), 0.0), gl_FrontMaterial.shininess)*
		   gl_FrontLightProduct[0].specular;
	}
/*
	ldotn = dot(n,l1);
	if (ldotn > 0.0) {
		gl_FragColor += 
			ldotn*gl_FrontLightProduct[1].diffuse +
			pow(max(dot(n,h1), 0.0), gl_FrontMaterial.shininess)*
				 gl_FrontLightProduct[1].specular;
	}
*/
	vec4 p = e_clip+lambda*(V_clip - e_clip);
	gl_FragDepth = 0.5*p.z/p.w+0.5;
	
}