This is the code I'm using:
camera.Projection = Matrix.PerspectiveFovRH((float)Math.PI / 2, ShadowMapSize / (float)ShadowMapSize, 1, 5);
for(var i = 0; i < 6; i++)
{
var renderTargetView = shadowMap.GetRenderTargetView((TextureCubeFace)i);
var up = DetermineLightUp((TextureCubeFace) i);
var forward = DirectionToVector((TextureCubeFace) i);
camera.View = Matrix.LookAtRH(Position, Position + forward, up);
camera.BoundingFrustum = new BoundingFrustum(camera.View * camera.Projection);
}
private static Vector3 DirectionToVector(TextureCubeFace direction)
{
switch (direction)
{
case TextureCubeFace.NegativeX:
return -Vector3.UnitX;
case TextureCubeFace.NegativeY:
return -Vector3.UnitY;
case TextureCubeFace.NegativeZ:
return -Vector3.UnitZ;
case TextureCubeFace.PositiveX:
return Vector3.UnitX;
case TextureCubeFace.PositiveY:
return Vector3.UnitY;
case TextureCubeFace.PositiveZ:
return Vector3.UnitZ;
default:
throw new ArgumentOutOfRangeException("direction");
}
}
private static Vector3 DetermineLightUp(TextureCubeFace direction)
{
switch (direction)
{
case TextureCubeFace.NegativeY:
return -Vector3.UnitX;
case TextureCubeFace.PositiveY:
return Vector3.UnitX;
default:
return Vector3.UnitY;
}
}
I can post some example output if it'll help.
Edited by Telanor, 09 March 2013 - 10:51 PM.






