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)
RevLine 
[1347]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;
[1487]18  float pixel = 1.0 / 32.0;   
[1347]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);           
[1487]25                OUT.hPosition = float4(0, 0, 1000000, 1);
[1347]26   }
27   else
28   {
29                float4 wPosition = float4(normalize(pos.xyz),1);   
30                cPosition = mul(worldView, wPosition);
31                OUT.hPosition = mul(Proj, cPosition);
32               
[1487]33                float intensity = 0.25;
[1355]34               
[1347]35                //read four neighbours
36                float sumdist = 0;
37                float dist;
[1487]38                float valids = 0;
39                float4 pos1 = tex2Dlod(PhotonHitMap, float4(uv + float2(pixel, pixel),0,0));
[1347]40                if(pos1.a != 0)
41                {
42                        dist = length(pos1.xyz - pos.xyz);
[1487]43                        sumdist += dist;
[1347]44                        valids++;
45                }
[1487]46               
47                float4 pos2 = tex2Dlod(PhotonHitMap, float4(uv + float2(-pixel, pixel),0,0));
[1347]48                if(pos2.a != 0)
49                {
50                        dist = length(pos2.xyz - pos.xyz);
[1487]51                        sumdist += dist;
[1347]52                        valids++;
53                }
[1487]54               
55                float4 pos3 = tex2Dlod(PhotonHitMap, float4(uv + float2(pixel, -pixel),0,0));
[1347]56                if(pos3.a != 0)
57                {
58                        dist = length(pos3.xyz - pos.xyz);
[1487]59                        sumdist += dist;
[1347]60                        valids++;
61                }
[1487]62               
63                float4 pos4 = tex2Dlod(PhotonHitMap, float4(uv + float2(-pixel, -pixel),0,0));
[1347]64                if(pos4.a != 0)
65                {
66                        dist = length(pos4.xyz - pos.xyz);
[1487]67                        sumdist += dist;
[1347]68                        valids++;
69                }
[1487]70                               
71                float avrdist = sumdist / 4;//valids;
72                float maxdist = 1;
[1355]73                intensity = max(maxdist - avrdist, 0.0) / maxdist;
74               
[1487]75                //intensity = valids / 4.0;//avrdist;
76               
77                //OUT.color = float4(1,1,1,intensity);
78                OUT.color = intensity;
[1347]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.