tweak point light rendering
							parent
							
								
									0060c22d72
								
							
						
					
					
						commit
						ee909ba94e
					
				| 
						 | 
				
			
			@ -40,8 +40,7 @@ namespace Kav
 | 
			
		|||
            set
 | 
			
		||||
            {
 | 
			
		||||
                positions[i] = value.Position;
 | 
			
		||||
                colors[i] = value.Color.ToVector3() * value.Intensity;
 | 
			
		||||
                intensities[i] = value.Intensity;
 | 
			
		||||
                colors[i] = value.Color.ToVector3() * value.Radius;
 | 
			
		||||
                lightPositionsParam.SetValue(positions);
 | 
			
		||||
                lightColorsParam.SetValue(colors);
 | 
			
		||||
            }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,19 +8,17 @@ namespace Kav
 | 
			
		|||
 | 
			
		||||
        public Vector3 Position { get; }
 | 
			
		||||
        public Color Color { get; }
 | 
			
		||||
        public float Intensity { get; }
 | 
			
		||||
        public float Radius { get; }
 | 
			
		||||
 | 
			
		||||
        public float EffectiveRadius { get; }
 | 
			
		||||
        public BoundingSphere BoundingSphere { get; }
 | 
			
		||||
 | 
			
		||||
        public PointLight(Vector3 position, Color color, float intensity = 1f)
 | 
			
		||||
        public PointLight(Vector3 position, Color color, float radius)
 | 
			
		||||
        {
 | 
			
		||||
            Position = position;
 | 
			
		||||
            Color = color;
 | 
			
		||||
            Intensity = intensity;
 | 
			
		||||
            Radius = radius;
 | 
			
		||||
 | 
			
		||||
            EffectiveRadius = (float) System.Math.Sqrt(Intensity);
 | 
			
		||||
            BoundingSphere = new BoundingSphere(position, EffectiveRadius);
 | 
			
		||||
            BoundingSphere = new BoundingSphere(position, Radius);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										14
									
								
								Renderer.cs
								
								
								
								
							
							
						
						
									
										14
									
								
								Renderer.cs
								
								
								
								
							| 
						 | 
				
			
			@ -467,15 +467,7 @@ namespace Kav
 | 
			
		|||
            PointLight pointLight
 | 
			
		||||
        ) {
 | 
			
		||||
            GraphicsDevice.SetRenderTarget(renderTarget);
 | 
			
		||||
            if (Vector3.Distance(camera.Position, pointLight.Position) < pointLight.EffectiveRadius)
 | 
			
		||||
            {
 | 
			
		||||
                GraphicsDevice.RasterizerState = RasterizerState.CullClockwise;
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                GraphicsDevice.RasterizerState = RasterizerState.CullCounterClockwise;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            GraphicsDevice.RasterizerState = RasterizerState.CullClockwise;
 | 
			
		||||
            GraphicsDevice.DepthStencilState = DepthStencilState.None;
 | 
			
		||||
            GraphicsDevice.BlendState = BlendState.Additive;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -489,12 +481,12 @@ namespace Kav
 | 
			
		|||
 | 
			
		||||
            DeferredPointLightEffect.PointLightPosition = pointLight.Position;
 | 
			
		||||
            DeferredPointLightEffect.PointLightColor =
 | 
			
		||||
                pointLight.Color.ToVector3() * pointLight.Intensity;
 | 
			
		||||
                pointLight.Color.ToVector3() * pointLight.Radius;
 | 
			
		||||
 | 
			
		||||
            DeferredPointLightEffect.FarPlane = 25f; // FIXME: magic value
 | 
			
		||||
 | 
			
		||||
            DeferredPointLightEffect.World =
 | 
			
		||||
                Matrix.CreateScale(pointLight.EffectiveRadius) *
 | 
			
		||||
                Matrix.CreateScale(pointLight.Radius) *
 | 
			
		||||
                Matrix.CreateTranslation(pointLight.Position);
 | 
			
		||||
            DeferredPointLightEffect.View = camera.View;
 | 
			
		||||
            DeferredPointLightEffect.Projection = camera.Projection;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue