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

Revision 1451, 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        float4 Color            : TEXCOORD4;
10};
11
12VS_OUT HPS_Smoke_S_VS (float4 position : POSITION,     
13                float4 texCoord : TEXCOORD0,
14                float4 Color: COLOR0,
15                uniform float4x4 worldView,
16                uniform float4x4 Proj,
17                uniform float4x4 worldViewProj)
18{
19        VS_OUT OUT;
20 
21        float2 offset = texCoord.zw;
22        float4 cPosition;   
23        cPosition = mul(worldView, position);
24        OUT.center = cPosition;
25        cPosition.xy += offset;                         
26        OUT.cPosition = cPosition;
27        OUT.r = abs(texCoord.z);               
28 
29    OUT.hPosition = mul( Proj, cPosition );
30     
31    OUT.texCoord = texCoord.xy;
32    OUT.Color = Color;   
33        return OUT;
34}
35
36
37float4 HPS_Smoke_S_PS(VS_OUT IN,
38                                                uniform float4x4 Proj,
39                                                uniform sampler2D Texture       ) : COLOR
40{
41        float4 Color = 0;
42        float f = 0;
43        float b = 1;
44        float alpha = 0;
45               
46        float d = length( IN.cPosition.xy- IN.center.xy);
47       
48        if( d < IN.r )
49        {       
50         float w = sqrt( IN.r * IN.r - d * d );
51         float4 fPosition = IN.cPosition;
52         float4 bPosition = IN.cPosition;
53         fPosition.z -= w;
54         bPosition.z += w;
55         fPosition = mul(Proj, fPosition);
56         bPosition = mul(Proj, bPosition);
57         f = fPosition.z / fPosition.w;
58         b = bPosition.z / bPosition.w;
59         
60        // alpha = pow(w / IN.r, 4);           
61        }
62        else
63         discard;
64       
65        Color.r = b;
66        Color.g = 1 - f;
67       
68        alpha = 1;
69        Color.a = alpha * IN.Color.a;
70        Color.a *= tex2D(Texture, IN.texCoord).r * 0.7;
71       
72       
73        return Color;
74}
Note: See TracBrowser for help on using the repository browser.