/// <summary>
        ///  Request new tracker results when new frame is available.
        /// </summary>
        public virtual void OnPostRender()
        {
            if (colorTrackerPanel != null && colorTrackerPanel.GetColorTracker() != null)
            {
                ColorTracker tracker = colorTrackerPanel.GetColorTracker();
                if (tracker == null)
                {
                    return;
                }

                List <TrackerResult> colorTrackerResults = tracker.Compute();

                CreateObjectsIfNeeded(colorTrackerResults.Count);

                for (var t = 0; t < colorTrackerResults.Count; t++)
                {
                    TrackerResult r = colorTrackerResults[t];

                    if (r.state == TrackingState.Tracked)
                    {
                        CoordinateMapper.ConvertInputToScreen(tracker.input, r.center, ref _reusablePosition);
                        _reusablePosition.z = perspectiveCamera.nearClipPlane + _scaleRatio - Mathf.Clamp(_reusablePosition.z, 0.0f, 0.8f);

                        _targets[t].transform.position = perspectiveCamera.ScreenToWorldPoint(_reusablePosition);
                        _targets[t].SetActive(true);
                    }
                    else
                    {
                        _targets[t].SetActive(false);
                    }
                }
            }
        }
        void OnPostRender()
        {
            if (!trackerPanel)
            {
                return;
            }

            _tracker = trackerPanel.GetColorTracker();

            if (_tracker == null || Camera.main == null)
            {
                return;
            }

            if (!_tracker.isRunning)
            {
                DestroyPreviousGraphics();
                return;
            }

            List <TrackerResult> result = _tracker.Compute();

            if (_graphics.Count != result.Count)
            {
                DestroyPreviousGraphics();
                CreateNewGraphics(result.Count);
            }

            for (var i = 0; i < result.Count; i++)
            {
                GameObject    actual = _graphics[i];
                TrackerResult target = result[i];
                if (target.state == TrackingState.Tracked)
                {
                    CoordinateMapper.ConvertInputToScreen(_tracker.input, target.center, ref _reusableScreenPosition);
                    CoordinateMapper.ConvertScreenToUI(_reusableScreenPosition, actual.GetComponent <RectTransform>());
                    actual.SetActive(true);
                }
                else
                {
                    actual.SetActive(false);
                }
            }
        }
        private void UpdateEventsAndRaycast()
        {
            if (colorTrackerPanel == null)
            {
                return;
            }
            ColorTracker tracker = colorTrackerPanel.GetColorTracker();

            if (tracker == null)
            {
                return;
            }

            List <TrackerResult> colorTrackerResults = tracker.GetLatestResult();

            AllocatePointerDataIfNeeded(colorTrackerResults);

            for (var t = 0; t < colorTrackerResults.Count; t++)
            {
                PointerEventData current = _pointerData[t];
                current.Reset();
                TrackerResult r = colorTrackerResults[t];

                if (r.state == TrackingState.Tracked)
                {
                    CoordinateMapper.ConvertInputToScreen(tracker.input, r.center, ref _reusablePosition);
                }
                else
                {
                    _reusablePosition.Set(-150, -150, 0);
                }

                current.position = _reusablePosition;
                current.delta    = r.linearVelocity;
                eventSystem.RaycastAll(current, m_RaycastResultCache);
                current.pointerCurrentRaycast = FindFirstRaycast(m_RaycastResultCache);
                UpdateHoverAndExit(current);
                HandleTrigger(current);
                m_RaycastResultCache.Clear();
            }
        }