Esempio n. 1
0
 /// <summary>
 /// Removes the specified light
 /// </summary>
 /// <param name="light">Directional light</param>
 public void Remove(SceneLightDirectional light)
 {
     if (this.directionalLights.Contains(light))
     {
         this.directionalLights.Remove(light);
     }
 }
Esempio n. 2
0
        /// <summary>
        /// Gets if the flare is visible
        /// </summary>
        /// <param name="light">Key light</param>
        /// <param name="eyePosition">Eye position</param>
        /// <returns>Returns true if the flare is visible</returns>
        private bool IsFlareVisible(SceneLightDirectional light, Vector3 eyePosition)
        {
            if (this.Scene != null)
            {
                var   frustum = this.Scene.Camera.Frustum;
                float maxZ    = this.Scene.Camera.FarPlaneDistance;

                Vector3 lPositionUnit = eyePosition - light.Direction;

                //Is the light into the vision cone?
                if (frustum.Contains(lPositionUnit) != ContainmentType.Disjoint)
                {
                    //Calculate the ray from light to position
                    Vector3 lightPosition = light.GetPosition(maxZ);
                    Ray     ray           = new Ray(lightPosition, -light.Direction);

                    if (!this.Scene.PickNearest(ray, RayPickingParams.Coarse, out var res))
                    {
                        return(true);
                    }

                    if (this.Scene.PickNearest(ray, RayPickingParams.Perfect, out PickingResult <Triangle> result) &&
                        Vector3.Distance(lightPosition, eyePosition) > result.Distance)
                    {
                        return(false);
                    }
                }
            }

            return(false);
        }
Esempio n. 3
0
 /// <summary>
 /// Adds the specified new light to colection
 /// </summary>
 /// <param name="light">Directional light</param>
 public void Add(SceneLightDirectional light)
 {
     this.directionalLights.Add(light);
 }