struct VS_OUTPUT { float4 Pos: POSITION; float2 texCoord: TEXCOORD0; float2 subTexCoord: TEXCOORD1; float diffuse: TEXCOORD2; }; uniform float4x4 worldviewproj; uniform float3 lightPosition; // object space uniform float3 eyePosition; // object space uniform float4 shininess; VS_OUTPUT main_vp( float4 position: POSITION, float3 normal: NORMAL, float2 subTexCoord: TEXCOORD0, float4 color: COLOR ) { VS_OUTPUT Out; Out.Pos = mul(worldviewproj, position); Out.subTexCoord = subTexCoord; Out.texCoord = color.xy; // Calculate vertex to eye vector float3 vertToEye = position - eyePosition; float aligned = dot(normal, vertToEye); // calculate light vector float3 N = normalize(normal); float3 L = normalize(lightPosition - position.xyz); // calculate light vector N = normalize(-normal); L = normalize(lightPosition - position.xyz); // Calculate diffuse component Out.diffuse = clamp(dot(N, L) , 0.0, 1.0) + clamp(-dot(N, L) , 0.0, 1.0); return Out; }