48 lines
1.5 KiB
C#
48 lines
1.5 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];
|
||
|
|
||
|
readonly EffectParameter lightDirectionsParam;
|
||
|
readonly EffectParameter lightColorsParam;
|
||
|
|
||
|
public DirectionalLightCollection(EffectParameter lightDirectionsParam, EffectParameter lightColorsParam)
|
||
|
{
|
||
|
this.lightDirectionsParam = lightDirectionsParam;
|
||
|
this.lightColorsParam = lightColorsParam;
|
||
|
}
|
||
|
|
||
|
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;
|
||
|
lightDirectionsParam.SetValue(directions);
|
||
|
lightColorsParam.SetValue(colors);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|