GL_SPHERE_MAP with GLSL

Hi, I would like to mimic GL_SHPERE_MAP with GLSL but I cannot manage to have it right.

This is my shader:

[b][Vertex]
varying vec2 texCoord;
varying vec4 color;

void main()
{
gl_Position = ftransform();

vec3 u = normalize(gl_ModelViewMatrix * gl_Vertex);
vec3 n = gl_NormalMatrix * gl_Normal;

vec3 r = reflect(u, n);
//r.z += 1.0;
	
float m = 1.0 / 2.0 * sqrt(dot(r,r));
				
texCoord.s = r.x * m + 0.5;
texCoord.t = r.y * m + 0.5;

}

[Fragment]
uniform sampler2D EnvMap;
uniform vec4 ReflectionColor = {1,1,1,1};
varying vec2 texCoord;

void main()
{
gl_FragColor = ReflectionColor * texture2D(EnvMap, texCoord);
}[/b]

I read the glTexGen documentation, but the z+1 didn’t help. Results are not the same as with the fixed pipeline.

Any help will be appreciated.

reference: http://www.ozone3d.net/tutorials/glsl_texturing_p04.php