123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- Texture2D shaderTexture;
- SamplerState SampleType;
- cbuffer LightBuffer
- {
- float4 ambientColor;
- float4 diffuseColor;
- float3 lightDirection;
- float specularPower;
- float4 specularColor;
- };
- struct PixelInputType
- {
- float4 position : SV_POSITION;
- float2 tex : TEXCOORD0;
- float3 normal : NORMAL;
- float3 viewDirection : TEXCOORD1;
- };
- float4 LightPixelShader(PixelInputType input) : SV_TARGET
- {
- float4 textureColor;
- float3 lightDir;
- float lightIntensity;
- float4 color;
- float3 reflection;
- float4 specular;
- // Sample the pixel color from the texture using the sampler at this texture coordinate
- textureColor = shaderTexture.Sample(SampleType, input.tex);
- // Set the default output color to the ambient light value
- color = ambientColor;
- // Init the specular color
- specular = float4(0.0f, 0.0f, 0.0f, 0.0f);
- // Invert the light direction for calculations
- lightDir = -lightDirection;
- // Calculate the amount of light on this pixel
- lightIntensity = saturate(dot(input.normal, lightDir));
- if (lightIntensity > 0.0f)
- {
- color += diffuseColor * lightIntensity;
- // Saturate the ambient and diffuse color
- color = saturate(color);
- // Calculate the reflection vector
- reflection = normalize(2 * lightIntensity * input.normal - lightDir);
- // Determine the amount of specular light based on the reflection vector, viewing direction, and specular power
- specular = pow (saturate(dot(reflection, input.viewDirection)), specularPower);
- }
- // Multiply the texture pixel and the final diffuse color to get the final pixel result
- color = color * textureColor;
- // Add the specular component last to the output color
- color = saturate(color + specular);
- return color;
- }
|