source: GTP/trunk/App/Demos/Illum/Ogre/Media/materials/programs/_oldGameTools_DepthShadow.hlsl @ 1094

Revision 1094, 1.7 KB checked in by szirmay, 18 years ago (diff)
Line 
1///////depth map
2struct VS_OUT
3{
4        float4 hPosition        : POSITION;
5        float4 Position : TEXCOORD0;
6};
7
8VS_OUT hDepthVS(float4 position : POSITION,     
9                uniform float4x4 worldView,
10                uniform float4x4 worldViewProj)
11{
12 
13  VS_OUT OUT;
14  OUT.hPosition = mul(worldViewProj, position);
15  OUT.Position = mul(worldView, position);
16  OUT.Position.z *= -1.0;
17  return OUT;
18}
19
20
21
22float4 DepthPS(VS_OUT IN ):COLOR
23{
24        float dist = length(IN.Position.xyz);
25        return float4(dist, dist, dist, 1);     
26}
27
28///////////////Shadow
29
30struct VS_OUT_SHADOW
31{
32        float4 hPosition        : POSITION;
33        float4 Position         : TEXCOORD0;
34};
35
36VS_OUT_SHADOW depthShadowVS(float4 position : POSITION,
37                uniform float4x4 world,
38                uniform float4x4 worldViewProj)
39{
40  VS_OUT_SHADOW OUT;
41  OUT.hPosition = mul(worldViewProj, position);
42  OUT.Position = mul(world, position);
43  return OUT;
44}
45
46
47float4 depthShadowPS(VS_OUT_SHADOW IN,
48                                        uniform float4x4 lightView,
49                                        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);
54
55        float4 light = 1;
56       
57        float4 lightCamPos = mul(lightView, IN.Position);
58        float d = length(lightCamPos.xyz);
59       
60        float4 lightScreenPos = mul(lightViewProj, IN.Position);
61        lightScreenPos = lightScreenPos / lightScreenPos.w ;
62        float dist = length(lightScreenPos.xy);
63       
64        if(dist < 1.0 && lightCamPos.z < 0)
65        {
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;                     
75        }
76        else
77                light = 1;
78               
79        return light;   
80}
81
Note: See TracBrowser for help on using the repository browser.