/// <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); } }
/// <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); }
/// <summary> /// Adds the specified new light to colection /// </summary> /// <param name="light">Directional light</param> public void Add(SceneLightDirectional light) { this.directionalLights.Add(light); }