All pastes #2047026 Raw Edit

Anonymous

public text v1 · immutable
#2047026 ·published 2011-04-16 02:23 UTC
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;
}