Kav/Effects/DirectionalLightCollection.cs

56 lines
1.9 KiB
C#

using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
namespace Kav
{
public class DirectionalLightCollection
{
private readonly Vector3[] directions = new Vector3[4];
private readonly Vector3[] colors = new Vector3[4];
private readonly float[] intensities = new float[4];
private readonly Matrix[] lightSpaceMatrices = new Matrix[4];
readonly EffectParameter lightDirectionsParam;
readonly EffectParameter lightColorsParam;
readonly EffectParameter lightSpaceMatricesParam;
public DirectionalLightCollection(
EffectParameter lightDirectionsParam,
EffectParameter lightColorsParam,
EffectParameter lightSpaceMatricesParam
) {
this.lightDirectionsParam = lightDirectionsParam;
this.lightColorsParam = lightColorsParam;
this.lightSpaceMatricesParam = lightSpaceMatricesParam;
}
public DirectionalLight this[int i]
{
get
{
var color = colors[i] / intensities[i];
return new DirectionalLight(
directions[i],
new Color(
color.X,
color.Y,
color.Z,
1f
),
intensities[i]
);
}
set
{
directions[i] = value.Direction;
colors[i] = value.Color.ToVector3() * value.Intensity;
intensities[i] = value.Intensity;
lightSpaceMatrices[i] = value.View * value.Projection;
lightDirectionsParam.SetValue(directions);
lightColorsParam.SetValue(colors);
lightSpaceMatricesParam.SetValue(lightSpaceMatrices);
}
}
}
}