SimpleSample.fx
上传用户:junlon
上传日期:2022-01-05
资源大小:39075k
文件大小:4k
源码类别:

DirextX编程

开发平台:

Visual C++

  1. //--------------------------------------------------------------------------------------
  2. // File: SimpleSample.fx
  3. //
  4. // The effect file for the SimpleSample sample.  
  5. // 
  6. // Copyright (c) Microsoft Corporation. All rights reserved.
  7. //--------------------------------------------------------------------------------------
  8. //--------------------------------------------------------------------------------------
  9. // Global variables
  10. //--------------------------------------------------------------------------------------
  11. float4 g_MaterialAmbientColor;      // Material's ambient color
  12. float4 g_MaterialDiffuseColor;      // Material's diffuse color
  13. float3 g_LightDir;                  // Light's direction in world space
  14. float4 g_LightDiffuse;              // Light's diffuse color
  15. texture g_MeshTexture;              // Color texture for mesh
  16. float    g_fTime;                   // App's time in seconds
  17. float4x4 g_mWorld;                  // World matrix for object
  18. float4x4 g_mWorldViewProjection;    // World * View * Projection matrix
  19. //--------------------------------------------------------------------------------------
  20. // Texture samplers
  21. //--------------------------------------------------------------------------------------
  22. sampler MeshTextureSampler = 
  23. sampler_state
  24. {
  25.     Texture = <g_MeshTexture>;
  26.     MipFilter = LINEAR;
  27.     MinFilter = LINEAR;
  28.     MagFilter = LINEAR;
  29. };
  30. //--------------------------------------------------------------------------------------
  31. // Vertex shader output structure
  32. //--------------------------------------------------------------------------------------
  33. struct VS_OUTPUT
  34. {
  35.     float4 Position   : POSITION;   // vertex position 
  36.     float4 Diffuse    : COLOR0;     // vertex diffuse color (note that COLOR0 is clamped from 0..1)
  37.     float2 TextureUV  : TEXCOORD0;  // vertex texture coords 
  38. };
  39. //--------------------------------------------------------------------------------------
  40. // This shader computes standard transform and lighting
  41. //--------------------------------------------------------------------------------------
  42. VS_OUTPUT RenderSceneVS( float4 vPos : POSITION, 
  43.                          float3 vNormal : NORMAL,
  44.                          float2 vTexCoord0 : TEXCOORD0 )
  45. {
  46.     VS_OUTPUT Output;
  47.     float3 vNormalWorldSpace;
  48.     
  49.     // Transform the position from object space to homogeneous projection space
  50.     Output.Position = mul(vPos, g_mWorldViewProjection);
  51.     
  52.     // Transform the normal from object space to world space    
  53.     vNormalWorldSpace = normalize(mul(vNormal, (float3x3)g_mWorld)); // normal (world space)
  54.     // Calc diffuse color    
  55.     Output.Diffuse.rgb = g_MaterialDiffuseColor * g_LightDiffuse * max(0,dot(vNormalWorldSpace, g_LightDir)) + 
  56.                          g_MaterialAmbientColor;   
  57.     Output.Diffuse.a = 1.0f; 
  58.     
  59.     // Just copy the texture coordinate through
  60.     Output.TextureUV = vTexCoord0; 
  61.     
  62.     return Output;    
  63. }
  64. //--------------------------------------------------------------------------------------
  65. // Pixel shader output structure
  66. //--------------------------------------------------------------------------------------
  67. struct PS_OUTPUT
  68. {
  69.     float4 RGBColor : COLOR0;  // Pixel color    
  70. };
  71. //--------------------------------------------------------------------------------------
  72. // This shader outputs the pixel's color by modulating the texture's
  73. // color with diffuse material color
  74. //--------------------------------------------------------------------------------------
  75. PS_OUTPUT RenderScenePS( VS_OUTPUT In ) 
  76.     PS_OUTPUT Output;
  77.     // Lookup mesh texture and modulate it with diffuse
  78.     Output.RGBColor = tex2D(MeshTextureSampler, In.TextureUV) * In.Diffuse;
  79.     return Output;
  80. }
  81. //--------------------------------------------------------------------------------------
  82. // Renders scene 
  83. //--------------------------------------------------------------------------------------
  84. technique RenderScene
  85. {
  86.     pass P0
  87.     {          
  88.         VertexShader = compile vs_1_1 RenderSceneVS();
  89.         PixelShader  = compile ps_1_1 RenderScenePS(); 
  90.     }
  91. }