All pastes #2047028 Raw Edit

Something

public text v1 · immutable
#2047028 ·published 2011-04-16 02:23 UTC
rendered paste body
// This is C5E2v_fragmentLighting from "The Cg Tutorial" (Addison-Wesley, ISBN
// 0321194969) by Randima Fernando and Mark J. Kilgard.  See page 124.

void C5E2v_fragmentLighting(float4 position : POSITION,
                            float3 normal   : NORMAL,
							float2 texCoord : TEXCOORD0,

                        out float4 oPosition : POSITION,
                        out float3 objectPos : TEXCOORD0,
                        out float3 oNormal   : TEXCOORD1,
						out float4 color2     : COLOR,
						out float3 H		 : TEXCOORD2,
						out float3 N         : TEXCOORD3,
						out float  diffuseLight : TEXCOORD4,
						out float3 lightColor2 : TEXCOORD5,
						out float2 texCoord2   : TEXCOORD6,
						out float3 lightDirection : TEXCOORD7,

                    uniform float4x4 modelViewProj,
					uniform float3   globalAmbient,
					uniform float3   eyePosition,
					uniform float3   Ka,
					uniform float3   Ke,
					uniform float3   Kd,
					uniform float3   lightPosition,
					uniform float3   lightColor)
{
	texCoord2 = texCoord;
  oPosition = mul(modelViewProj, position);
  objectPos = position.xyz;
  oNormal = normal;
  lightColor2 = lightColor;

  float3 P = position.xyz;
  N = normalize(normal);
 
  // Compute emissive term
  float3 emissive = Ke;

  // Compute ambient term
  float3 ambient = Ka * globalAmbient;

  // Compute the diffuse term
  float3 L = normalize(lightPosition - P);
  diffuseLight = max(dot(L, N), 0);
  float3 diffuse = Kd * lightColor * diffuseLight;

  // Compute the Half vector
  float3 V = normalize(eyePosition - P);
  H = normalize(L + V);

  color2.xyz = emissive + ambient + diffuse;
  color2.w = 1;

  lightDirection = lightPosition - position.xyz;
}