Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- cbuffer ConstantBuffer
- {
- matrix worldMatrix;
- matrix viewMatrix;
- matrix projectionMatrix;
- matrix lightViewMatrix;
- matrix lightProjectionMatrix;
- };
- struct VS_OUTPUT
- {
- float4 pos : SV_POSITION;
- float2 texCoord : TEXCOORD0;
- float4 lightViewPosition : TEXCOORD1;
- float4 worldPosition : POSITION;
- };
- VS_OUTPUT VS(float4 position : POSITION, float2 texCoord : TEXCOORD)
- {
- position.w = 1.0f;
- VS_OUTPUT output;
- output.pos = mul(worldMatrix, position);
- output.pos = mul(viewMatrix, output.pos);
- output.pos = mul(projectionMatrix, output.pos);
- output.texCoord = texCoord;
- output.lightViewPosition = mul(position, worldMatrix);
- output.lightViewPosition = mul(output.lightViewPosition, lightViewMatrix);
- output.lightViewPosition = mul(output.lightViewPosition, lightProjectionMatrix);
- output.worldPosition = mul(position, worldMatrix);
- return output;
- }
- Texture2D texture2d;
- SamplerState samplerState;
- float4 PS(VS_OUTPUT input) : SV_TARGET
- {
- input.lightViewPosition.xyz /= input.lightViewPosition.w;
- float4 ambient = float4(0.1f,0.1f,0.1f,1.0f);
- float2 projectTexCoord;
- projectTexCoord.x = input.lightViewPosition.x / 2.0f + 0.5f;
- projectTexCoord.y = -input.lightViewPosition.y / 2.0f + 0.5f;
- float3 normal = float3(0.0f,1.0f,0.0f);
- float3 lightPos = normalize(float3(0.0f,3.0f,-3.0f) - input.worldPosition);
- if((saturate(projectTexCoord.x) == projectTexCoord.x) && (saturate(projectTexCoord.y) == projectTexCoord.y))
- {
- float depthValue = texture2d.Sample(samplerState, projectTexCoord).r;
- float lightDepthValue = input.lightViewPosition.z;
- if(depthValue > lightDepthValue)
- {
- float lightIntensity = saturate(dot(normal, lightPos));
- if(lightIntensity > 0.0f)
- {
- return float4(1.0f,1.0f,1.0f,1.0f) * lightIntensity;
- }
- }
- }
- return float4(0.0f,0.0f,0.0f,1.0f);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement