float4x4 gWorld : WORLD; float4x4 gWorldViewProj : WORLDVIEWPROJECTION; float3 gLightDirection = float3(-0.577f, -0.577f, 0.577f); Texture2D gDiffuseMap; SamplerState samLinear { Filter = MIN_MAG_MIP_LINEAR; AddressU = Wrap;// or Mirror or Clamp or Border AddressV = Wrap;// or Mirror or Clamp or Border }; RasterizerState Solid { FillMode = SOLID; CullMode = FRONT; }; struct VS_INPUT{ float3 pos : POSITION; float3 normal : NORMAL; float2 texCoord : TEXCOORD; }; struct VS_OUTPUT{ float4 pos : SV_POSITION; float3 normal : NORMAL; float2 texCoord : TEXCOORD; }; DepthStencilState EnableDepth { DepthEnable = TRUE; DepthWriteMask = ALL; }; RasterizerState NoCulling { CullMode = NONE; }; BlendState NoBlending { BlendEnable[0] = FALSE; }; //-------------------------------------------------------------------------------------- // Vertex Shader //-------------------------------------------------------------------------------------- VS_OUTPUT VS(VS_INPUT input){ VS_OUTPUT output; // Step 1: convert position into float4 and multiply with matWorldViewProj output.pos = mul ( float4(input.pos,1.0f), gWorldViewProj ); // Step 2: rotate the normal: NO TRANSLATION // this is achieved by clipping the 4x4 to a 3x3 matrix, // thus removing the postion row of the matrix output.normal = normalize(mul(input.normal, (float3x3)gWorld)); output.texCoord = input.texCoord; return output; } //-------------------------------------------------------------------------------------- // Pixel Shader //-------------------------------------------------------------------------------------- float4 PS(VS_OUTPUT input) : SV_TARGET{ float4 diffuseColor = gDiffuseMap.Sample( samLinear,input.texCoord ); float3 color_rgb= diffuseColor.rgb; float color_a = diffuseColor.a; //HalfLambert Diffuse :) float diffuseStrength = dot(input.normal, -gLightDirection); diffuseStrength = diffuseStrength * 0.5 + 0.5; diffuseStrength = saturate(diffuseStrength); color_rgb = color_rgb * diffuseStrength; return float4( color_rgb , color_a ); } //-------------------------------------------------------------------------------------- // Technique //-------------------------------------------------------------------------------------- technique11 Default { pass P0 { SetRasterizerState(NoCulling); SetDepthStencilState(EnableDepth, 0); SetBlendState(NoBlending, float4(0.0f, 0.0f, 0.0f, 0.0f), 0xFFFFFFFF); SetVertexShader( CompileShader( vs_4_0, VS() ) ); SetGeometryShader( NULL ); SetPixelShader( CompileShader( ps_4_0, PS() ) ); } }