rendered paste body#VERTEX SHADER
varying vec4 diffuse, ambientGlobal, ambient, specular;
varying vec3 normal, lightDir, halfVector;
varying float shininess, attDist;
void main()
{
vec4 realPos;
vec3 lightVertVector;
//Calculate the "half vector", halfway between the light and eye vector
halfVector = normalize( gl_LightSource[0].halfVector.xyz );
//Calculate the vertex' normal
normal = normalize( gl_NormalMatrix * gl_Normal );
//Get the position of the vertex
realPos = gl_ModelViewMatrix * gl_Vertex;
//Get the vector for the light
lightVertVector = vec3( gl_LightSource[0].position - realPos );
//Get the direction for the light
lightDir = normalize( lightVertVector );
//The distance used in attenuation
attDist = length( lightVertVector );
//Calculate the diffuse
diffuse = gl_FrontMaterial.diffuse * gl_LightSource[0].diffuse;
//Calculate the ambients
ambient = gl_FrontMaterial.ambient * gl_LightSource[0].ambient;
ambientGlobal = gl_FrontMaterial.ambient * gl_LightModel.ambient;
//Calculate the specular and set shininess
specular = gl_FrontMaterial.specular * gl_LightSource[0].specular;
shininess = gl_FrontMaterial.shininess;
gl_TexCoord[0] = gl_MultiTexCoord0;
gl_Position = ftransform();
}
#PIXEL SHADER
varying vec4 diffuse, ambient, ambientGlobal, specular;
varying vec3 normal, lightDir, halfVector;
varying float shininess, attDist;
uniform sampler2D texture;
void main()
{
vec3 normNormal, normHalfVec;
float normalDotLightDir, normalDotHalfVector;
vec4 diffuseTerm, specularTerm, color, colorTex, texel;
float attenuation;
texel = texture2D(texture, gl_TexCoord[0].st);
if(texel.a == 0.0)
{
discard;
}
color = ambientGlobal;
normNormal = normalize(normal);
normalDotLightDir = max( dot(normNormal , lightDir) , 0.0 );
if(normalDotLightDir < 0.0001 && normalDotLightDir > -0.0001 && ambient.rgb == vec3(0.0 , 0.0 , 0.0))
{
gl_FragColor = color;
}
normHalfVec = normalize(halfVector);
diffuseTerm = diffuse * normalDotLightDir;
if(normalDotLightDir > 0.0)
{
normalDotHalfVector = max(dot( normNormal , normHalfVec.xyz ) , 0.0);
specularTerm = specular * pow( normalDotHalfVector , shininess );
attenuation = 1.0 / ( gl_LightSource[0].constantAttenuation +
gl_LightSource[0].linearAttenuation * attDist +
gl_LightSource[0].quadraticAttenuation * attDist * attDist );
color += (attenuation * (diffuseTerm + ambient) ) + (attenuation * specularTerm);
}
gl_FragColor = color * texel;
}