source: GTP/trunk/App/Demos/Illum/Ogre/Media/materials/programs/GameTools_Cau.hlsl @ 777

Revision 777, 2.0 KB checked in by szirmay, 18 years ago (diff)
Line 
1float CauSpriteSize;
2float CauSpriteIntens;
3
4struct VS_OUT
5{
6        float4 hPosition        : POSITION;
7        float4 texCoord         : TEXCOORD0;
8        float4 color            : COLOR0;
9        float2 r                        : TEXCOORD1;
10        float2 center           : TEXCOORD2;
11        float4 position         : TEXCOORD3;
12};
13
14VS_OUT CauVS(float4 position : POSITION,       
15                float4 texCoord : TEXCOORD0,
16                float4 color    : COLOR0,
17                uniform float4x4 worldView,
18                uniform float4x4 Proj,
19                uniform float4x4 worldViewProj,
20                uniform float resolution,
21                uniform sampler2D PhotonHitMap : register(s0))
22{
23  VS_OUT OUT;
24     
25   float radius = CauSpriteSize;
26   float2 offset = 2.0 * texCoord.zw * radius;
27   
28   float4 cPosition; 
29
30   float4 pos = tex2Dlod(PhotonHitMap, float4(position.x, 1.0 - position.y,0,0)).rgba;
31   if(pos.a != 1)//no photon hit
32   {
33                OUT.center = 1000.0f;
34                OUT.position = OUT.hPosition = 1000.0f; //transform out of view
35   }
36   else
37   {
38                float4 wPosition = float4(normalize(pos.xyz),1);
39   
40                cPosition = mul(worldView, wPosition);
41                OUT.center = cPosition.xy;
42                cPosition.xy += offset;                         
43                OUT.position = cPosition;       
44                OUT.hPosition = mul(Proj, cPosition);
45               
46                /*
47                //rotate to camera
48                cPosition = mul(worldView, wPosition);
49                               
50                float3 C = cPosition.xyz;
51                float3 right = cross(C, float3(0,1,0));
52                float3 up = cross(right, C);
53               
54                float3 cOffset = offset.x * right + offset.y * up;
55                cPosition.xy += float2(-0.5/resolution, -0.5/resolution);
56                OUT.center = cPosition.xy;
57                cPosition.xyz += cOffset;                               
58                OUT.position = cPosition;       
59                OUT.hPosition = mul(Proj, cPosition);
60                */
61         }     
62 
63   OUT.r.x = abs(offset.x);
64   OUT.r.y = radius;
65   OUT.texCoord = texCoord;
66   OUT.color = 1;       
67   
68   return OUT;
69}
70
71
72float4 CauPS(VS_OUT IN,
73                uniform sampler2D intensityTex : register(s1)
74                 ):COLOR
75{
76
77  float2 texcoord = (IN.center - IN.position.xy) / IN.r.x;
78  texcoord = (texcoord + 1.0) * 0.5;
79  float intens = tex2D(intensityTex, texcoord).r;
80  IN.color.a = intens * CauSpriteIntens;
81 
82  return IN.color;
83 
84}
85
86
Note: See TracBrowser for help on using the repository browser.