// Global variables //----------------------------------------------------------------------------- float4x4 mWorldViewProj; // World * View * Projection transformation float4x4 mInvWorld; // Inverted world matrix float3 mLightPos; // Light position struct VS_OUTPUT { float4 Position: POSITION0; float2 TexCoord: TEXCOORD0; float2 diffuse: TEXCOORD1; }; VS_OUTPUT vertexMain( float4 Position: POSITION0, float2 TexCoord: TEXCOORD0, float2 diffuse: TEXCOORD1, float3 Normal: NORMAL0) { VS_OUTPUT Output; // calculate light vector float3 N = normalize(Normal); float3 L = normalize(mLightPos - Position.xyz); // Calculate diffuse component diffuse.x = max(dot(N, L),0); // Shading offset float offset = 0.0001f; //Subtract the offset and clamp the texture to 0 diffuse = float2(clamp(diffuse.x+offset,0,1),0.5); Output.Position = mul(Position,mWorldViewProj); Output.diffuse = diffuse; Output.TexCoord = TexCoord; return( Output ); } sampler2D tex0 : register(s0) ; sampler2D diffuseRamp : register(s1) ; float4 pixelMain( float2 TexCoord: TEXCOORD0, float2 diffuseIn: TEXCOORD1 ) : COLOR0 { float4 color = float4(1,1,1,1); float4 diffuse = float4(0.8f, 0.8f, 0.8f, 1.0f)*tex2D(tex0, TexCoord); // Step functions from textures float4 diffuseInc = tex2D(diffuseRamp, diffuseIn); color = (diffuse * diffuseInc); return( color); }