[2266] | 1 | struct ShadedTex_OUT
|
---|
| 2 | {
|
---|
| 3 | float4 vPos : POSITION;
|
---|
| 4 | float4 texCoord : TEXCOORD0;
|
---|
| 5 | float4 wNormal : TEXCOORD1;
|
---|
| 6 | float4 wPos : TEXCOORD2;
|
---|
| 7 | };
|
---|
| 8 | #define SAMPLECUTDIST2 0.01
|
---|
| 9 | float4 TexturedShadedOneLight_PS(ShadedTex_OUT IN,
|
---|
| 10 | uniform float3 lightPos,
|
---|
| 11 | uniform float3 lightDir,
|
---|
| 12 | uniform float3 lightColor,
|
---|
| 13 | uniform float lightPower,
|
---|
| 14 | uniform sampler2D colorTex : register(s0)):COLOR0
|
---|
| 15 | {
|
---|
| 16 | float4 color = 1;
|
---|
| 17 |
|
---|
| 18 | lightDir = normalize(lightDir);
|
---|
| 19 | IN.wNormal.xyz = normalize(IN.wNormal.xyz);
|
---|
| 20 |
|
---|
| 21 | float3 diff = lightPos - IN.wPos;
|
---|
| 22 | float dist2 = dot(diff, diff);
|
---|
| 23 | if(dist2 < SAMPLECUTDIST2)
|
---|
| 24 | dist2 = SAMPLECUTDIST2;
|
---|
| 25 | diff = normalize(diff);
|
---|
| 26 | float cosa = max(dot(lightDir, -diff), 0);
|
---|
| 27 | float cosb = max(dot(IN.wNormal.xyz, diff), 0);
|
---|
| 28 |
|
---|
[2404] | 29 | color.rgb = pow(cosa, 9) * cosb / dist2 * lightPower * lightColor;
|
---|
[2266] | 30 | //color.rgb *= lightPower;
|
---|
| 31 | //return 0;
|
---|
| 32 | return color * tex2D(colorTex, IN.texCoord);
|
---|
[2404] | 33 | }
|
---|
| 34 |
|
---|
| 35 |
|
---|
| 36 | float4 TexturedShadedTwoLights_PS(ShadedTex_OUT IN,
|
---|
| 37 | uniform float3 lightPos1,
|
---|
| 38 | uniform float3 lightDir1,
|
---|
| 39 | uniform float3 lightColor1,
|
---|
| 40 | uniform float lightPower1,
|
---|
| 41 | uniform float3 lightPos2,
|
---|
| 42 | uniform float3 lightDir2,
|
---|
| 43 | uniform float3 lightColor2,
|
---|
| 44 | uniform float lightPower2,
|
---|
| 45 | uniform sampler2D colorTex : register(s0)):COLOR0
|
---|
| 46 | {
|
---|
| 47 | float4 color = 0;
|
---|
| 48 | IN.wNormal.xyz = normalize(IN.wNormal.xyz);
|
---|
| 49 |
|
---|
| 50 | {
|
---|
| 51 | float3 lightDir = normalize(lightDir1);
|
---|
| 52 |
|
---|
| 53 | float3 diff = lightPos1 - IN.wPos;
|
---|
| 54 | float dist2 = dot(diff, diff);
|
---|
| 55 | if(dist2 < SAMPLECUTDIST2)
|
---|
| 56 | dist2 = SAMPLECUTDIST2;
|
---|
| 57 | diff = normalize(diff);
|
---|
| 58 | float cosa = max(dot(lightDir1, -diff), 0);
|
---|
| 59 | float cosb = max(dot(IN.wNormal.xyz, diff), 0);
|
---|
| 60 |
|
---|
[2422] | 61 | color.rgb += pow(cosa, 9) * cosb / dist2 * lightPower1 * lightColor1;
|
---|
| 62 | //color.rgb += cosb / dist2 * lightPower1 * lightColor1;
|
---|
[2404] | 63 |
|
---|
| 64 | }
|
---|
[2422] | 65 | /*
|
---|
[2404] | 66 | {
|
---|
| 67 | float3 lightDir = normalize(lightDir2);
|
---|
| 68 |
|
---|
| 69 | float3 diff = lightPos2 - IN.wPos;
|
---|
| 70 | float dist2 = dot(diff, diff);
|
---|
| 71 | if(dist2 < SAMPLECUTDIST2)
|
---|
| 72 | dist2 = SAMPLECUTDIST2;
|
---|
| 73 | diff = normalize(diff);
|
---|
| 74 | float cosa = max(dot(lightDir2, -diff), 0);
|
---|
| 75 | float cosb = max(dot(IN.wNormal.xyz, diff), 0);
|
---|
| 76 |
|
---|
[2422] | 77 | color.rgb += pow(cosa, 9) * cosb / dist2 * lightPower2 * lightColor2;
|
---|
| 78 | //color.rgb += cosb / dist2 * lightPower1 * lightColor1;
|
---|
[2404] | 79 | }
|
---|
[2422] | 80 | */
|
---|
[2404] | 81 | //color.rgb *= lightPower;
|
---|
| 82 | //return 0;
|
---|
[2432] | 83 | return (color) * tex2D(colorTex, IN.texCoord);
|
---|
[2266] | 84 | } |
---|