I have been trying to get shadows to work for days, but I'm getting half of the scene darker instead of shadows:
[attachment=18737:scene.png]
What's going wrong?
C++:
// NOTICE: The camera used for shadow map is not lighting view point, I'm trying to get shadows to work first
D3DXMatrixLookAtLH(&lightView, &D3DXVECTOR3(0.0f, 10.0f, 340.0f), &D3DXVECTOR3(0.0f, 10.0f, 0.0f), &D3DXVECTOR3(0.0f, 1.0f, 0.0f));
lightProj = camera->getProjection();
float fTexOffs = 0.5 + (0.5 / (float)SHADOW_MAP_SIZE);
D3DXMATRIX matTexAdj( 0.5f, 0.0f, 0.0f, 0.0f,
0.0f, -0.5f, 0.0f, 0.0f,
0.0f, 0.0f, 1.0f, 0.0f,
fTexOffs, fTexOffs, 0.0f, 1.0f );
D3DXMATRIX lightWorldViewProj = lightWorld * lightView * lightProj;
D3DXMATRIX matTexture = lightWorldViewProj * matTexAdj;
effect->SetMatrix("g_matTexture", &matTexture);
Generating depth map shader:
VS_OUT VS(VS_IN IN)
{
...
OUT.Z = mul(IN.Pos, WorldViewProj).z;
return OUT;
}
PS_OUT PS(VS_OUT IN)
{
OUT.Color = ...
OUT.Z = float4(IN.Z, IN.Z, IN.Z, 1.0f);
return OUT;
}
Final scene shader:
texture shadowMapTexture;
sampler shadowMap = sampler_state
{
texture = <shadowMapTexture>;
MipFilter = Linear;
MinFilter = Linear;
MagFilter = Linear;
AddressU = Clamp;
AddressV = Clamp;
};
VS_OUT VS( VERTEX IN )
{
...
OUT.vTexCoord = mul( IN.Position, g_matTexture );
return OUT;
}
PS_OUT Shadow ( VS_OUT IN )
{
...
float fShadowTerm = tex2Dproj( shadowMap, IN.vTexCoord ) < (IN.vTexCoord.z - 0.001f) ? 0.1f : 1.0f;
return color * fShadowTerm;
}