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)
RevLine 
[1336]1
2struct VS_OUT
3{
[1339]4        float4 hPosition        : POSITION;
5        float4 cPosition        : TEXCOORD1;
6        float2 texCoord         : TEXCOORD0;
7        float r                         : TEXCOORD2;   
8        float4 center           : TEXCOORD3;
[1424]9        float4 Color            : TEXCOORD4;
[1336]10};
11
[1339]12VS_OUT HPS_Smoke_S_VS (float4 position : POSITION,     
13                float4 texCoord : TEXCOORD0,
[1424]14                float4 Color: COLOR0,
[1339]15                uniform float4x4 worldView,
16                uniform float4x4 Proj,
17                uniform float4x4 worldViewProj)
[1336]18{
[1339]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);               
[1336]28 
[1339]29    OUT.hPosition = mul( Proj, cPosition );
30     
[1424]31    OUT.texCoord = texCoord.xy;
32    OUT.Color = Color;   
[1339]33        return OUT;
34}
[1336]35
[1339]36
37float4 HPS_Smoke_S_PS(VS_OUT IN,
38                                                uniform float4x4 Proj,
39                                                uniform sampler2D Texture       ) : COLOR
[1336]40{
[1339]41        float4 Color = 0;
42        float f = 0;
43        float b = 1;
44        float alpha = 0;
45               
[1424]46        float d = length( IN.cPosition.xy- IN.center.xy);
[1336]47       
[1339]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);
[1424]57         f = fPosition.z / fPosition.w;
58         b = bPosition.z / bPosition.w;
[1355]59         
[1451]60        // alpha = pow(w / IN.r, 4);           
[1336]61        }
[1339]62        else
63         discard;
[1336]64       
[1355]65        Color.r = b;
66        Color.g = 1 - f;
[1451]67       
68        alpha = 1;
[1424]69        Color.a = alpha * IN.Color.a;
[1446]70        Color.a *= tex2D(Texture, IN.texCoord).r * 0.7;
[1339]71       
72       
73        return Color;
[1336]74}
Note: See TracBrowser for help on using the repository browser.