Ignore:
Timestamp:
09/11/06 23:09:16 (18 years ago)
Author:
szirmay
Message:
 
File:
1 edited

Legend:

Unmodified
Added
Removed
  • GTP/trunk/App/Demos/Illum/Ogre/Media/materials/programs/GameTools_HPS_Smoke_S.hlsl

    r1336 r1339  
    22struct VS_OUT 
    33{ 
    4         float4 hPosition : POSITION; 
    5         float4 cPosition : TEXCOORD0; 
    6         float  radius    : TEXCOORD2; 
    7         float4 texCoord  : TEXCOORD1; 
     4        float4 hPosition        : POSITION; 
     5        float4 cPosition        : TEXCOORD1; 
     6        float2 texCoord         : TEXCOORD0; 
     7        float r                         : TEXCOORD2;     
     8        float4 center           : TEXCOORD3; 
    89}; 
    910 
    10 VS_OUT VP(float4 mPosition : POSITION, 
    11                   uniform float4x4 worldView, 
    12                   uniform float4x4 Proj, 
    13                   uniform float4x4 worldViewProj 
    14                   float2 texCoord :TEXCOORD0) 
     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) 
    1517{ 
    16  VS_OUT Out; 
    17  Out.texCoord.xy = texCoord;  
    18  Out.texCoord.zw = (texCoord * 2.0) - 1.0;  
     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);                 
    1927  
    20  float2 offset = texCoord.zw; 
    21  float4 cPosition = mul(worldView, mPosition); 
    22  cPosition.xy += offset; 
    23     
    24  Out.hPosition = mul( Proj, cPosition ); 
    25  Out.cPosition = cPosition; 
    26  Out.radius = abs(offset.x); 
    27   
    28   return OUT; 
     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         alpha = w / IN.r;       
     58        } 
     59        else 
     60         discard; 
     61         
     62        Color.r = f; 
     63        Color.g = 1 - b; 
     64        Color.a = alpha; 
     65         
     66         
     67        return Color;  
    2968} 
    30  
    31 float4 FP(VS_OUT In, 
    32                   uniform float4x4 Proj, 
    33                   uniform sampler2D Texture):COLOR 
    34 { 
    35         float4 color = 1; 
    36         float front = 0; 
    37         float back = 1; 
    38          
    39         float4 tex = tex2D(Texture, In.texCoord.xy); 
    40         float d = length(In.TexCoord.zw); 
    41         float w = sqrt(In.radius * In.radius - d * d); 
    42         if(d < r) 
    43         { 
    44                 float4 positionF; float4 positionB; 
    45                 positionF = positionB = In.cPosition; 
    46                 positionF.z -= w; 
    47                 positionB.z += w; 
    48                 positionF = mul(Proj, positionF); 
    49                 positionB = mul(Proj, positionB); 
    50                 positionF = (positionF / positionF.w + 1.0) / 2.0; 
    51                 positionB = (positionB / positionB.w + 1.0) / 2.0; 
    52         } 
    53         color.rgb = positionF.z; 
    54          
    55         return color; 
    56 } 
Note: See TracChangeset for help on using the changeset viewer.