2012-01-15 11:37:15 -05:00
|
|
|
// Shader based on work by Fabien Sanglard
|
|
|
|
// Released under the terms of CC-BY 3.0
|
2011-10-31 21:52:10 -04:00
|
|
|
|
2012-01-15 11:37:15 -05:00
|
|
|
varying vec3 lightVec;
|
|
|
|
varying vec3 halfVec;
|
|
|
|
varying vec3 eyeVec;
|
|
|
|
|
|
|
|
uniform vec3 lightdir;
|
|
|
|
|
|
|
|
void main()
|
|
|
|
{
|
|
|
|
|
|
|
|
gl_TexCoord[0] = gl_MultiTexCoord0;
|
2013-06-18 10:35:29 -04:00
|
|
|
|
2012-01-15 11:37:15 -05:00
|
|
|
// Building the matrix Eye Space -> Tangent Space
|
|
|
|
vec3 n = normalize (gl_NormalMatrix * gl_Normal);
|
|
|
|
vec3 t = normalize (gl_NormalMatrix * gl_MultiTexCoord1.xyz); // tangent
|
|
|
|
vec3 b = cross (n, t);
|
2013-06-18 10:35:29 -04:00
|
|
|
|
2012-01-15 11:37:15 -05:00
|
|
|
vec3 vertexPosition = vec3(gl_ModelViewMatrix * gl_Vertex);
|
2013-06-18 10:35:29 -04:00
|
|
|
|
2012-01-15 11:37:15 -05:00
|
|
|
// transform light and half angle vectors by tangent basis
|
|
|
|
vec3 v;
|
|
|
|
v.x = dot (lightdir, t);
|
|
|
|
v.y = dot (lightdir, b);
|
|
|
|
v.z = dot (lightdir, n);
|
|
|
|
lightVec = normalize (v);
|
2013-06-18 10:35:29 -04:00
|
|
|
|
|
|
|
|
2012-01-15 11:37:15 -05:00
|
|
|
v.x = dot (vertexPosition, t);
|
|
|
|
v.y = dot (vertexPosition, b);
|
|
|
|
v.z = dot (vertexPosition, n);
|
|
|
|
eyeVec = normalize (v);
|
2013-06-18 10:35:29 -04:00
|
|
|
|
|
|
|
|
2012-01-15 11:37:15 -05:00
|
|
|
vertexPosition = normalize(vertexPosition);
|
2013-06-18 10:35:29 -04:00
|
|
|
|
2012-01-15 11:37:15 -05:00
|
|
|
// Normalize the halfVector to pass it to the fragment shader
|
|
|
|
|
|
|
|
// No need to divide by two, the result is normalized anyway.
|
2013-06-18 10:35:29 -04:00
|
|
|
// vec3 halfVector = normalize((vertexPosition + lightDir) / 2.0);
|
2012-01-15 11:37:15 -05:00
|
|
|
vec3 halfVector = normalize(vertexPosition + lightdir);
|
|
|
|
v.x = dot (halfVector, t);
|
|
|
|
v.y = dot (halfVector, b);
|
|
|
|
v.z = dot (halfVector, n);
|
|
|
|
|
|
|
|
// No need to normalize, t,b,n and halfVector are normal vectors.
|
|
|
|
//normalize (v);
|
2013-06-18 10:35:29 -04:00
|
|
|
halfVec = v ;
|
|
|
|
|
|
|
|
|
2012-01-15 11:37:15 -05:00
|
|
|
gl_Position = ftransform();
|
|
|
|
|
|
|
|
}
|