struct ShadedTex_OUT { float4 vPos : POSITION; float4 texCoord : TEXCOORD0; float4 wNormal : TEXCOORD1; float4 wPos : TEXCOORD2; }; #define SAMPLECUTDIST2 0.01 float4 TexturedShadedOneLight_PS(ShadedTex_OUT IN, uniform float3 lightPos, uniform float3 lightDir, uniform float3 lightColor, uniform float lightPower, uniform sampler2D colorTex : register(s0)):COLOR0 { float4 color = 1; lightDir = normalize(lightDir); IN.wNormal.xyz = normalize(IN.wNormal.xyz); float3 diff = lightPos - IN.wPos; float dist2 = dot(diff, diff); if(dist2 < SAMPLECUTDIST2) dist2 = SAMPLECUTDIST2; diff = normalize(diff); float cosa = max(dot(lightDir, -diff), 0); float cosb = max(dot(IN.wNormal.xyz, diff), 0); color.rgb = pow(cosa, 9) * cosb / dist2 * lightPower * lightColor; //color.rgb *= lightPower; //return 0; return color * tex2D(colorTex, IN.texCoord); } float4 TexturedShadedTwoLights_PS(ShadedTex_OUT IN, uniform float3 lightPos1, uniform float3 lightDir1, uniform float3 lightColor1, uniform float lightPower1, uniform float3 lightPos2, uniform float3 lightDir2, uniform float3 lightColor2, uniform float lightPower2, uniform sampler2D colorTex : register(s0)):COLOR0 { float4 color = 0; IN.wNormal.xyz = normalize(IN.wNormal.xyz); { float3 lightDir = normalize(lightDir1); float3 diff = lightPos1 - IN.wPos; float dist2 = dot(diff, diff); if(dist2 < SAMPLECUTDIST2) dist2 = SAMPLECUTDIST2; diff = normalize(diff); float cosa = max(dot(lightDir1, -diff), 0); float cosb = max(dot(IN.wNormal.xyz, diff), 0); color.rgb += pow(cosa, 9) * cosb / dist2 * lightPower1 * lightColor1; //color.rgb += cosb / dist2 * lightPower1 * lightColor1; } /* { float3 lightDir = normalize(lightDir2); float3 diff = lightPos2 - IN.wPos; float dist2 = dot(diff, diff); if(dist2 < SAMPLECUTDIST2) dist2 = SAMPLECUTDIST2; diff = normalize(diff); float cosa = max(dot(lightDir2, -diff), 0); float cosb = max(dot(IN.wNormal.xyz, diff), 0); color.rgb += pow(cosa, 9) * cosb / dist2 * lightPower2 * lightColor2; //color.rgb += cosb / dist2 * lightPower1 * lightColor1; } */ //color.rgb *= lightPower; //return 0; return (color) * tex2D(colorTex, IN.texCoord); }