/// <summary> /// Pick first position /// </summary> /// <param name="ray">Ray</param> /// <param name="facingOnly">Select only facing triangles</param> /// <param name="result">Picking result</param> /// <returns>Returns true if picked position found</returns> public bool PickFirst(Ray ray, bool facingOnly, out PickingResult <T> result) { Stopwatch w = Stopwatch.StartNew(); try { result = new PickingResult <T>() { Distance = float.MaxValue, }; if (this.Root.PickFirst(ray, facingOnly, out Vector3 position, out T item, out float distance)) { result.Position = position; result.Item = item; result.Distance = distance; return(true); } return(false); } finally { w.Stop(); Counters.AddPick((float)w.Elapsed.TotalSeconds); } }