source: GTP/trunk/App/Demos/Illum/Ogre/Media/materials/programs/GameTools_CauCube.hlsl @ 1487

Revision 1487, 2.0 KB checked in by szirmay, 18 years ago (diff)
Line 
1struct VS_OUT
2{
3        float4 hPosition        : POSITION;
4        float4 color            : COLOR0;       
5};
6
7VS_OUT CauVS(float4 position : POSITION,       
8                float4 texCoord : TEXCOORD0,
9                float4 color    : COLOR0,
10                uniform float4x4 worldView,
11                uniform float4x4 Proj,
12                uniform float resolution,
13                uniform sampler2D PhotonHitMap : register(s0))
14{
15  VS_OUT OUT;
16     
17  float4 cPosition;
18  float pixel = 1.0 / 32.0;   
19  float2 uv = float2(position.x, 1.0 - position.y);
20  float4 pos = tex2Dlod(PhotonHitMap, float4(uv,0,0)).rgba;
21
22   if(pos.a == 0)//no photon hit
23   {
24                OUT.color = float4(0,0,0,0);           
25                OUT.hPosition = float4(0, 0, 1000000, 1);
26   }
27   else
28   {
29                float4 wPosition = float4(normalize(pos.xyz),1);   
30                cPosition = mul(worldView, wPosition);
31                OUT.hPosition = mul(Proj, cPosition);
32               
33                float intensity = 0.25;
34               
35                //read four neighbours
36                float sumdist = 0;
37                float dist;
38                float valids = 0;
39                float4 pos1 = tex2Dlod(PhotonHitMap, float4(uv + float2(pixel, pixel),0,0));
40                if(pos1.a != 0)
41                {
42                        dist = length(pos1.xyz - pos.xyz);
43                        sumdist += dist;
44                        valids++;
45                }
46               
47                float4 pos2 = tex2Dlod(PhotonHitMap, float4(uv + float2(-pixel, pixel),0,0));
48                if(pos2.a != 0)
49                {
50                        dist = length(pos2.xyz - pos.xyz);
51                        sumdist += dist;
52                        valids++;
53                }
54               
55                float4 pos3 = tex2Dlod(PhotonHitMap, float4(uv + float2(pixel, -pixel),0,0));
56                if(pos3.a != 0)
57                {
58                        dist = length(pos3.xyz - pos.xyz);
59                        sumdist += dist;
60                        valids++;
61                }
62               
63                float4 pos4 = tex2Dlod(PhotonHitMap, float4(uv + float2(-pixel, -pixel),0,0));
64                if(pos4.a != 0)
65                {
66                        dist = length(pos4.xyz - pos.xyz);
67                        sumdist += dist;
68                        valids++;
69                }
70                               
71                float avrdist = sumdist / 4;//valids;
72                float maxdist = 1;
73                intensity = max(maxdist - avrdist, 0.0) / maxdist;
74               
75                //intensity = valids / 4.0;//avrdist;
76               
77                //OUT.color = float4(1,1,1,intensity);
78                OUT.color = intensity;
79        } 
80   
81   return OUT;
82}
83
84
85float4 CauPS(VS_OUT IN,
86                uniform float3 color ):COLOR
87{
88  return IN.color * float4(color, 1); 
89}
90
91
Note: See TracBrowser for help on using the repository browser.