132001f49Smrg// Vertex shader for cube-texture reflection mapping
232001f49Smrg// Brian Paul
332001f49Smrg
432001f49Smrg
532001f49Smrgvarying vec3 normal;
632001f49Smrg
732001f49Smrgvoid main() 
832001f49Smrg{
932001f49Smrg   vec3 n = gl_NormalMatrix * gl_Normal;
1032001f49Smrg   vec3 u = normalize(vec3(gl_ModelViewMatrix * gl_Vertex));
1132001f49Smrg   float two_n_dot_u = 2.0 * dot(n, u);
1232001f49Smrg   vec4 f;
1332001f49Smrg   f.xyz = u - n * two_n_dot_u;
1432001f49Smrg   f.w = 1.0;
1532001f49Smrg
1632001f49Smrg   // outputs
1732001f49Smrg   normal = n;
1832001f49Smrg   gl_TexCoord[0] = gl_TextureMatrix[0] * f;
1932001f49Smrg   gl_Position = ftransform();
2032001f49Smrg}
21