/// <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);
            }
        }