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,
 | 
			
		||||
            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)
 | 
			
		||||
        {
 | 
			
		||||
| 
						 | 
				
			
			@ -228,11 +234,12 @@ public class LightMapper
 | 
			
		|||
                var model = new ModelFile(modelPath);
 | 
			
		||||
                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))
 | 
			
		||||
                {
 | 
			
		||||
                    baseLight.SpotlightDir = vhot.Position;
 | 
			
		||||
                    baseLight.SpotlightDir = Vector3.Transform(vhot.Position - model.Header.Center, rot);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -240,13 +247,7 @@ public class LightMapper
 | 
			
		|||
 | 
			
		||||
        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.SpotlightDir = Vector3.Transform(baseLight.SpotlightDir, rot);
 | 
			
		||||
            baseLight.SpotlightInnerAngle = (float)Math.Cos(float.DegreesToRadians(propSpotlight.InnerAngle));
 | 
			
		||||
            baseLight.SpotlightOuterAngle = (float)Math.Cos(float.DegreesToRadians(propSpotlight.OuterAngle));
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -255,7 +256,7 @@ public class LightMapper
 | 
			
		|||
        {
 | 
			
		||||
            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),
 | 
			
		||||
                InnerRadius = propLight.InnerRadius,
 | 
			
		||||
                Radius = propLight.Radius,
 | 
			
		||||
| 
						 | 
				
			
			@ -284,7 +285,7 @@ public class LightMapper
 | 
			
		|||
 | 
			
		||||
            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),
 | 
			
		||||
                InnerRadius = propAnimLight.InnerRadius,
 | 
			
		||||
                Radius = propAnimLight.Radius,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue