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 |
|
---|
29 | color.rgb = pow(cosa, 9) * cosb / dist2 * lightPower * lightColor;
|
---|
30 | //color.rgb *= lightPower;
|
---|
31 | //return 0;
|
---|
32 | return color * tex2D(colorTex, IN.texCoord);
|
---|
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 |
|
---|
61 | color.rgb += pow(cosa, 9) * cosb / dist2 * lightPower1 * lightColor1;
|
---|
62 | //color.rgb += cosb / dist2 * lightPower1 * lightColor1;
|
---|
63 |
|
---|
64 | }
|
---|
65 | /*
|
---|
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 |
|
---|
77 | color.rgb += pow(cosa, 9) * cosb / dist2 * lightPower2 * lightColor2;
|
---|
78 | //color.rgb += cosb / dist2 * lightPower1 * lightColor1;
|
---|
79 | }
|
---|
80 | */
|
---|
81 | //color.rgb *= lightPower;
|
---|
82 | //return 0;
|
---|
83 | return (color) * tex2D(colorTex, IN.texCoord);
|
---|
84 | } |
---|