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

Revision 1094, 1.2 KB checked in by szirmay, 18 years ago (diff)
Line 
1
2float readDistanceCubeMap(samplerCUBE dcm, float3 coord)               
3{
4        float dist = texCUBE(dcm, float3(coord.xy, - coord.z)).r;
5        if(dist == 0) dist = 10000; ///sky
6        return dist;
7}
8
9struct VertOut
10{
11        float4 hPosition        :POSITION;     
12        float2 texCoord         :TEXCOORD;     
13        float3 wPosition        :TEXCOORD1;     
14};
15
16
17VertOut deaultVS(float4 position : POSITION,
18                float2 texCoord : TEXCOORD0,
19                uniform float4x4 worldViewProj,
20                uniform float4x4 world)
21{
22  VertOut OUT;
23  OUT.texCoord = texCoord;
24  OUT.hPosition = mul(worldViewProj, position); 
25  OUT.wPosition = mul(world, position).xyz;
26  return OUT;   
27}
28
29float4 deaultPS(VertOut IN,
30                                uniform samplerCUBE CubeMap : register(s0),
31                                uniform samplerCUBE distanceCube : register(s1),
32                                uniform float3 cubeMapCameraPosition,
33                                uniform float attenuation):COLOR
34{
35        float4 Color = float4(1,1,1,1);
36       
37        float3 dir = IN.wPosition - cubeMapCameraPosition;
38        float4 caustic = texCUBE(CubeMap, float3(dir.xy,-dir.z) );
39        float mydist = length(dir);
40        float dist = readDistanceCubeMap(distanceCube, dir);
41       
42        float EPSILON = 1.0;
43
44        if(mydist > dist + EPSILON) caustic = 0;
45        //caustic.rgb *= max(attenuation - mydist, 0.0) / attenuation;
46                       
47        Color = caustic;
48        Color += attenuation;
49        Color.a = 1;   
50        return Color;
51}
Note: See TracBrowser for help on using the repository browser.