Ignore:
Timestamp:
06/27/06 10:17:56 (18 years ago)
Author:
szirmay
Message:
 
File:
1 edited

Legend:

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

    r807 r1060  
    3232        float4 hPosition        : POSITION; 
    3333        float4 Position         : TEXCOORD0; 
     34        float4 cPosition        : TEXCOORD1; 
    3435}; 
    3536 
    3637VS_OUT_SHADOW depthShadowVS(float4 position : POSITION,  
    3738                uniform float4x4 world, 
     39                uniform float4x4 worldView, 
    3840                uniform float4x4 worldViewProj) 
    3941{ 
     
    4143  OUT.hPosition = mul(worldViewProj, position); 
    4244  OUT.Position = mul(world, position); 
     45  OUT.cPosition = mul(worldView, position); 
    4346  return OUT; 
    4447} 
     
    4851                                        uniform float4x4 lightView, 
    4952                                        uniform float4x4 lightViewProj, 
    50                                         uniform sampler2D depthShadowMap ):COLOR 
    51 { 
    52         float bias = 0.0; 
    53         float4 shadowColor = float4(0.4, 0.4, 0.4, 1.0); 
     53                                        uniform float4x4 lightView2, 
     54                                        uniform float4x4 lightViewProj2, 
     55                                        uniform sampler2D depthShadowMap : register(s0), 
     56                                        uniform sampler2D depthShadowMap2 : register(s1)):COLOR 
     57{                                        
     58        float bias = 0.06; 
     59        float4 shadowColor = float4(0.6, 0.6, 0.6, 1.0); 
    5460 
    55         float4 light = 1; 
     61        float4 light1 = 1; 
     62        float4 light2 = 1; 
     63        float weight1 = 1; 
     64        float weight2 = 1; 
    5665         
    57         float4 lightCamPos = mul(lightView, IN.Position); 
    58         float d = length(lightCamPos.xyz); 
     66        float4 lightCamPos1 = mul(lightView, IN.Position); 
     67        float d1 = length(lightCamPos1.xyz);     
     68        float4 lightScreenPos1 = mul(lightViewProj, IN.Position); 
     69        lightScreenPos1 = lightScreenPos1 / lightScreenPos1.w ;  
     70        lightScreenPos1 = ( lightScreenPos1 + 1.0 ) / 2.0; 
     71        lightScreenPos1.y = 1.0 - lightScreenPos1.y; 
     72        float4 storedDepth1 = tex2D(depthShadowMap, lightScreenPos1.xy); 
     73                if(storedDepth1.r + bias < d1) 
     74                        light1=0; 
    5975         
    60         float4 lightScreenPos = mul(lightViewProj, IN.Position); 
    61         lightScreenPos = lightScreenPos / lightScreenPos.w ; 
    62         float dist = length(lightScreenPos.xy); 
    6376         
    64         if(dist < 1.0 && lightCamPos.z < 0) 
     77        float4 lightCamPos2 = mul(lightView2, IN.Position); 
     78        float d2 = length(lightCamPos2.xyz); 
     79         
     80                         
     81        float4 lightScreenPos2 = mul(lightViewProj2, IN.Position); 
     82        lightScreenPos2 = lightScreenPos2 / lightScreenPos2.w ;  
     83 
     84        if(abs(lightScreenPos2.x) < 0.99 && abs(lightScreenPos2.y) < 0.99 ) 
    6585        { 
    66                 lightScreenPos = ( lightScreenPos + 1.0 ) / 2.0; 
    67                 lightScreenPos.y = 1.0 - lightScreenPos.y; 
    68                 float4 storedDepth = tex2D(depthShadowMap, lightScreenPos.xy); 
    69                          
    70                  
    71                 if(storedDepth.r + bias < d) 
    72                         light = shadowColor; 
    73                 if(storedDepth.r == 0) 
    74                         light = 1;                       
     86                lightScreenPos2 = ( lightScreenPos2 + 1.0 ) / 2.0; 
     87                lightScreenPos2.y = 1.0 - lightScreenPos2.y; 
     88                float4 storedDepth2 = tex2D(depthShadowMap2, lightScreenPos2.xy); 
     89                        if(storedDepth2.r + bias < d2) 
     90                                light2=0;        
    7591        } 
    7692        else 
    77                 light = 1; 
     93                weight2 = 0; 
    7894                 
    79         return light;    
     95        weight1 = 1 - weight2;   
     96                 
     97        return saturate((light1*weight1 + light2*weight2) + shadowColor);        
    8098} 
    8199 
Note: See TracChangeset for help on using the changeset viewer.