source: GTP/trunk/App/Demos/Illum/Ogre/Media/materials/programs/GameTools_HPS_Smoke_S.hlsl @ 1355

Revision 1355, 1.5 KB checked in by szirmay, 18 years ago (diff)
Line 
1
2struct VS_OUT
3{
4        float4 hPosition        : POSITION;
5        float4 cPosition        : TEXCOORD1;
6        float2 texCoord         : TEXCOORD0;
7        float r                         : TEXCOORD2;   
8        float4 center           : TEXCOORD3;
9};
10
11VS_OUT HPS_Smoke_S_VS (float4 position : POSITION,     
12                float4 texCoord : TEXCOORD0,
13               
14                uniform float4x4 worldView,
15                uniform float4x4 Proj,
16                uniform float4x4 worldViewProj)
17{
18        VS_OUT OUT;
19 
20        float2 offset = texCoord.zw;
21        float4 cPosition;   
22        cPosition = mul(worldView, position);
23        OUT.center = cPosition;
24        cPosition.xy += offset;                         
25        OUT.cPosition = cPosition;
26        OUT.r = abs(texCoord.z);               
27 
28    OUT.hPosition = mul( Proj, cPosition );
29     
30    OUT.texCoord = texCoord.xy;   
31        return OUT;
32}
33
34
35float4 HPS_Smoke_S_PS(VS_OUT IN,
36                                                uniform float4x4 Proj,
37                                                uniform sampler2D Texture       ) : COLOR
38{
39        float4 Color = 0;
40        float f = 0;
41        float b = 1;
42        float alpha = 0;
43               
44        float d = length( IN.cPosition.xyz - IN.center.xyz);
45       
46        if( d < IN.r )
47        {       
48         float w = sqrt( IN.r * IN.r - d * d );
49         float4 fPosition = IN.cPosition;
50         float4 bPosition = IN.cPosition;
51         fPosition.z -= w;
52         bPosition.z += w;
53         fPosition = mul(Proj, fPosition);
54         bPosition = mul(Proj, bPosition);
55         f = (fPosition.z / fPosition.w + 1.0) / 2.0;
56         b = (bPosition.z / bPosition.w + 1.0) / 2.0;
57         
58         alpha = pow(w / IN.r, 4) * 0.5;               
59        }
60        else
61         discard;
62       
63        Color.r = b;
64        Color.g = 1 - f;
65        Color.a = alpha;
66        //Color.a = tex2D(Texture, IN.texCoord).a * 0.2;
67       
68       
69        return Color;
70}
Note: See TracBrowser for help on using the repository browser.