Properly apply rotation to light offsets
This commit is contained in:
parent
16dddcb497
commit
ed1b95af35
|
@ -217,6 +217,12 @@ public class LightMapper
|
||||||
SpotlightDir = -Vector3.UnitZ,
|
SpotlightDir = -Vector3.UnitZ,
|
||||||
SpotlightInnerAngle = -1.0f,
|
SpotlightInnerAngle = -1.0f,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// TODO: Also apply scale?
|
||||||
|
var rot = Matrix4x4.Identity;
|
||||||
|
rot *= Matrix4x4.CreateRotationX(float.DegreesToRadians(brush.angle.X));
|
||||||
|
rot *= Matrix4x4.CreateRotationY(float.DegreesToRadians(brush.angle.Y));
|
||||||
|
rot *= Matrix4x4.CreateRotationZ(float.DegreesToRadians(brush.angle.Z));
|
||||||
|
|
||||||
if (propModelName != null)
|
if (propModelName != null)
|
||||||
{
|
{
|
||||||
|
@ -228,11 +234,12 @@ public class LightMapper
|
||||||
var model = new ModelFile(modelPath);
|
var model = new ModelFile(modelPath);
|
||||||
if (model.TryGetVhot(ModelFile.VhotId.LightPosition, out var vhot))
|
if (model.TryGetVhot(ModelFile.VhotId.LightPosition, out var vhot))
|
||||||
{
|
{
|
||||||
baseLight.Position += vhot.Position;
|
baseLight.Position += Vector3.Transform(vhot.Position - model.Header.Center, rot);
|
||||||
|
|
||||||
}
|
}
|
||||||
if (model.TryGetVhot(ModelFile.VhotId.LightDirection, out vhot))
|
if (model.TryGetVhot(ModelFile.VhotId.LightDirection, out vhot))
|
||||||
{
|
{
|
||||||
baseLight.SpotlightDir = vhot.Position;
|
baseLight.SpotlightDir = Vector3.Transform(vhot.Position - model.Header.Center, rot);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -240,13 +247,7 @@ public class LightMapper
|
||||||
|
|
||||||
if (propSpotlight != null)
|
if (propSpotlight != null)
|
||||||
{
|
{
|
||||||
var rot = Matrix4x4.Identity;
|
|
||||||
rot *= Matrix4x4.CreateRotationX(float.DegreesToRadians(brush.angle.X));
|
|
||||||
rot *= Matrix4x4.CreateRotationY(float.DegreesToRadians(brush.angle.Y));
|
|
||||||
rot *= Matrix4x4.CreateRotationZ(float.DegreesToRadians(brush.angle.Z));
|
|
||||||
|
|
||||||
baseLight.Spotlight = true;
|
baseLight.Spotlight = true;
|
||||||
baseLight.SpotlightDir = Vector3.Transform(baseLight.SpotlightDir, rot);
|
|
||||||
baseLight.SpotlightInnerAngle = (float)Math.Cos(float.DegreesToRadians(propSpotlight.InnerAngle));
|
baseLight.SpotlightInnerAngle = (float)Math.Cos(float.DegreesToRadians(propSpotlight.InnerAngle));
|
||||||
baseLight.SpotlightOuterAngle = (float)Math.Cos(float.DegreesToRadians(propSpotlight.OuterAngle));
|
baseLight.SpotlightOuterAngle = (float)Math.Cos(float.DegreesToRadians(propSpotlight.OuterAngle));
|
||||||
}
|
}
|
||||||
|
@ -255,7 +256,7 @@ public class LightMapper
|
||||||
{
|
{
|
||||||
var light = new Light
|
var light = new Light
|
||||||
{
|
{
|
||||||
Position = baseLight.Position + propLight.Offset,
|
Position = baseLight.Position + Vector3.Transform(propLight.Offset, rot),
|
||||||
Color = Utils.HsbToRgb(propLightColor.Hue, propLightColor.Saturation, propLight.Brightness),
|
Color = Utils.HsbToRgb(propLightColor.Hue, propLightColor.Saturation, propLight.Brightness),
|
||||||
InnerRadius = propLight.InnerRadius,
|
InnerRadius = propLight.InnerRadius,
|
||||||
Radius = propLight.Radius,
|
Radius = propLight.Radius,
|
||||||
|
@ -284,7 +285,7 @@ public class LightMapper
|
||||||
|
|
||||||
var light = new Light
|
var light = new Light
|
||||||
{
|
{
|
||||||
Position = baseLight.Position + propAnimLight.Offset,
|
Position = baseLight.Position + Vector3.Transform(propAnimLight.Offset, rot),
|
||||||
Color = Utils.HsbToRgb(propLightColor.Hue, propLightColor.Saturation, propAnimLight.MaxBrightness),
|
Color = Utils.HsbToRgb(propLightColor.Hue, propLightColor.Saturation, propAnimLight.MaxBrightness),
|
||||||
InnerRadius = propAnimLight.InnerRadius,
|
InnerRadius = propAnimLight.InnerRadius,
|
||||||
Radius = propAnimLight.Radius,
|
Radius = propAnimLight.Radius,
|
||||||
|
|
Loading…
Reference in New Issue