rendered paste body// This is C5E3f_basicLight from "The Cg Tutorial" (Addison-Wesley, ISBN
// 0321194969) by Randima Fernando and Mark J. Kilgard. See page 125.
float3 expand(float3 v)
{
return (v-0.5)*2; // Expand a range-compressed vector
}
void C5E3f_basicLight(float4 position : TEXCOORD0,
float3 normal : TEXCOORD1,
float3 H : TEXCOORD2,
float3 N : TEXCOORD3,
float diffuseLight : TEXCOORD4,
float lightColor : TEXCOORD5,
float2 texCoord : TEXCOORD6,
float2 normalMapTexCoord : TEXCOORD0,
float3 lightDir : TEXCOORD7,
float4 color2 : COLOR,
out float3 color : COLOR,
uniform float3 Ks,
uniform float shininess,
uniform sampler2D normalMap,
uniform samplerCUBE normalizeCube,
uniform sampler2D decal : TEX0)
{
// Compute the specular term
float specularLight = pow(max(dot(H, N), 0), shininess);
if (diffuseLight <= 0) specularLight = 0;
float3 specular = Ks * lightColor * specularLight;
float3 lightTex = texCUBE(normalizeCube, lightDir).xyz;
float3 light = expand(lightTex);
// Sample and expand the normal map texture
float3 normalTex = tex2D(normalMap, normalMapTexCoord).xyz;
float3 n = expand(normalTex);
// Diffuse lighting
color = dot(n,light) + tex2D(decal,texCoord) + specular;
}