Pastebin launched a little side project called VERYVIRAL.com, check it out ;-) Want more features on Pastebin? Sign Up, it's FREE!
Guest

Untitled

By: a guest on Mar 31st, 2011  |  syntax: None  |  size: 4.58 KB  |  views: 211  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
This paste has a previous version, view the difference. Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. //-----------------------------------------------------------------------------
  2. // Copyright (c) 2008 dhpoware. All Rights Reserved.
  3. //
  4. // Permission is hereby granted, free of charge, to any person obtaining a
  5. // copy of this software and associated documentation files (the "Software"),
  6. // to deal in the Software without restriction, including without limitation
  7. // the rights to use, copy, modify, merge, publish, distribute, sublicense,
  8. // and/or sell copies of the Software, and to permit persons to whom the
  9. // Software is furnished to do so, subject to the following conditions:
  10. //
  11. // The above copyright notice and this permission notice shall be included in
  12. // all copies or substantial portions of the Software.
  13. //
  14. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  15. // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  16. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  17. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  18. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
  19. // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  20. // IN THE SOFTWARE.
  21. //-----------------------------------------------------------------------------
  22.  
  23. //-----------------------------------------------------------------------------
  24. // Globals.
  25. //-----------------------------------------------------------------------------
  26.  
  27. float4x4 world;
  28. float4x4 view;
  29. float4x4 projection;
  30. float4x4 lightViewProjection;
  31. float4x4 textureScaleBias;
  32.  
  33. float3 lightDir;
  34. float4 lightColor;
  35. float4 materialAmbient;
  36. float4 materialDiffuse;
  37.  
  38. float depthBias;
  39. float texelSize;
  40.  
  41. //-----------------------------------------------------------------------------
  42. // Textures.
  43. //-----------------------------------------------------------------------------
  44.  
  45. texture shadowMap;
  46. sampler shadowMapSampler = sampler_state
  47. {
  48.     Texture = <shadowMap>;
  49.     MinFilter = Point;
  50.     MagFilter = Point;
  51.     MipFilter = None;
  52.     AddressU = Clamp;
  53.     AddressV = Clamp;
  54. };
  55.  
  56. //-----------------------------------------------------------------------------
  57. // Vertex shaders.
  58. //-----------------------------------------------------------------------------
  59.  
  60. void VS_Lambert(in  float4 inPosition  : POSITION,
  61. void VS_LambertWithShadows(in  float4 inPosition        : POSITION,
  62.                                in  float2 inTexCoord        : TEXCOORD,
  63.                                in  float3 inNormal          : NORMAL,
  64.                                        out float4 outPosition       : POSITION,
  65.                                        out float4 outLightSpacePos  : TEXCOORD0,
  66.                                        out float2 outShadowTexCoord : TEXCOORD1,
  67.                                        out float2 outTexCoord       : TEXCOORD2,
  68.                                            out float3 outNormal         : TEXCOORD3,
  69.                                            out float3 outLightDir       : TEXCOORD4)
  70. {
  71.         float4x4 worldViewProjection = mul(mul(world, view), projection);
  72.         float4 lightSpacePos = mul(mul(inPosition, world), lightViewProjection);
  73.         float4 shadowCoord = mul(lightSpacePos, textureScaleBias);
  74.                                        
  75.         outPosition = mul(inPosition, worldViewProjection);
  76.         outLightSpacePos = lightSpacePos;
  77.         outShadowTexCoord = shadowCoord.xy / shadowCoord.w;
  78.         outTexCoord = inTexCoord;
  79.         outNormal = mul(inNormal, (float3x3)world);
  80.         outLightDir = -lightDir;
  81. }
  82.  
  83. //-----------------------------------------------------------------------------
  84. // Pixel shaders.
  85. //-----------------------------------------------------------------------------
  86.  
  87. float PS_ShadowMapLookup(sampler shadowMap, float2 texCoord, float depth)
  88. {
  89.         return (tex2D(shadowMap, texCoord).r + 0.1 < depth) ? 0.0f : 1.0f;
  90. }
  91.  
  92. void PS_LambertWithShadows(in  float4 inLightSpacePos  : TEXCOORD0,
  93.                            in  float2 inShadowTexCoord : TEXCOORD1,
  94.                            in  float2 inTexCoord       : TEXCOORD2,
  95.                            in  float3 inNormal         : TEXCOORD3,
  96.                            in  float3 inLightDir       : TEXCOORD4,
  97.                                            out float4 outColor         : COLOR)
  98. {
  99.         float3 l = normalize(inLightDir);
  100.         float3 n = normalize(inNormal);
  101.         float nDotL = saturate(dot(n, l));
  102.        
  103.         float depth = inLightSpacePos.z / inLightSpacePos.w;
  104.     float shadowOcclusion = PS_ShadowMapLookup(shadowMapSampler, inShadowTexCoord, depth);
  105.    
  106.     outColor = (materialAmbient * lightColor) +
  107.                    (materialDiffuse * lightColor * nDotL) * shadowOcclusion;
  108. }
  109.  
  110.  
  111. technique LambertWithShadows
  112. {
  113.     pass
  114.     {
  115.         VertexShader = compile vs_2_0 VS_LambertWithShadows();
  116.         PixelShader = compile ps_2_0 PS_LambertWithShadows();
  117.     }
  118. }
clone this paste RAW Paste Data