Exemplo n.º 1
0
    /// <summary>
    /// Position a Trackable relative to the Camera.
    /// </summary>
    protected void PositionTrackable(TrackableBehaviour trackableBehaviour,
        Camera arCamera,
        QCARManagerImpl.PoseData camToTargetPose)
    {
        trackableBehaviour.transform.position =
                arCamera.transform.TransformPoint(camToTargetPose.position);

        trackableBehaviour.transform.rotation =
                arCamera.transform.rotation *
                camToTargetPose.orientation *
                Quaternion.AngleAxis(270, Vector3.left);
    }
Exemplo n.º 2
0
    /// <summary>
    /// Position the camera relative to a Trackable.
    /// </summary>
    protected void PositionCamera(TrackableBehaviour trackableBehaviour,
        Camera arCamera,
        QCARManagerImpl.PoseData camToTargetPose)
    {
        arCamera.transform.localPosition =
                trackableBehaviour.transform.rotation *
                Quaternion.AngleAxis(90, Vector3.left) *
                Quaternion.Inverse(camToTargetPose.orientation) *
                (-camToTargetPose.position) +
                trackableBehaviour.transform.position;

        arCamera.transform.rotation =
                trackableBehaviour.transform.rotation *
                Quaternion.AngleAxis(90, Vector3.left) *
                Quaternion.Inverse(camToTargetPose.orientation);
    }
Exemplo n.º 3
0
    // Method used to update poses of all active Image Targets
    // in the scene
    public void UpdateTrackablePoses(Camera arCamera,
        QCARManagerImpl.TrackableResultData[] trackableResultDataArray,
        int originTrackableID)
    {
        Dictionary<int, QCARManagerImpl.TrackableResultData> trackableResults = new Dictionary<int, QCARManagerImpl.TrackableResultData>();

        foreach (QCARManagerImpl.TrackableResultData trackableData in trackableResultDataArray)
        {
            // create a dictionary of all trackableResults
            trackableResults.Add(trackableData.id, trackableData);

            // For each Trackable data struct from native
            TrackableBehaviour trackableBehaviourBehaviour;
            if (mTrackableBehaviours.TryGetValue(trackableData.id, out trackableBehaviourBehaviour))
            {
                // If this is the world center skip it, we never move the
                // world center Trackable in the scene
                if (trackableData.id == originTrackableID)
                {
                    continue;
                }

                if ((trackableData.status ==
                        TrackableBehaviour.Status.DETECTED
                        || trackableData.status ==
                        TrackableBehaviour.Status.TRACKED) &&
                        trackableBehaviourBehaviour.enabled)
                {
                    // The Trackable object is visible and enabled,
                    // move it into position in relation to the camera
                    // (which we moved earlier)
                    PositionTrackable(trackableBehaviourBehaviour, arCamera,
                                      trackableData.pose);
                }
            }
        }

        // Update each Trackable
        // Do this once all Trackables have been moved into place

        mActiveTrackableBehaviours.Clear();

        foreach (TrackableBehaviour trackableBehaviour in mTrackableBehaviours.Values)
        {
            if (trackableBehaviour.enabled)
            {
                QCARManagerImpl.TrackableResultData trackableData;
                if (trackableResults.TryGetValue(trackableBehaviour.Trackable.ID, out trackableData))
                {
                    trackableBehaviour.OnTrackerUpdate(trackableData.status);
                }
                else
                {
                    trackableBehaviour.OnTrackerUpdate(TrackableBehaviour.Status.NOT_FOUND);
                }

                if (trackableBehaviour.CurrentStatus == TrackableBehaviour.Status.TRACKED ||
                    trackableBehaviour.CurrentStatus == TrackableBehaviour.Status.DETECTED)
                {
                    mActiveTrackableBehaviours.Add(trackableBehaviour);
                }
            }
        }
    }
Exemplo n.º 4
0
 // method used to update the camera pose in the scene
 public void UpdateCameraPose(Camera arCamera,
     QCARManagerImpl.TrackableResultData[] trackableResultDataArray,
     int originTrackableID)
 {
     // If there is a World Center Trackable use it to position the camera.
     if (originTrackableID >= 0)
     {
         foreach (QCARManagerImpl.TrackableResultData trackableData in trackableResultDataArray)
         {
             if (trackableData.id == originTrackableID)
             {
                 if (trackableData.status ==
                     TrackableBehaviour.Status.DETECTED
                     || trackableData.status ==
                     TrackableBehaviour.Status.TRACKED)
                 {
                     TrackableBehaviour trackableBehaviour;
                     if (mTrackableBehaviours.TryGetValue(originTrackableID, out trackableBehaviour))
                     {
                         if (trackableBehaviour.enabled)
                         {
                             PositionCamera(trackableBehaviour, arCamera,
                                            trackableData.pose);
                         }
                     }
                 }
                 break;
             }
         }
     }
 }
 /// <summary>
 /// Update currently tracked words
 /// </summary>
 /// <param name="arCamera">Word trackables will be positioned relative to this camera</param>
 /// <param name="newWordData">words that have been newly detected in the last frame</param>
 /// <param name="wordResults">all words that are currently tracked</param>
 public void UpdateWords(Camera arCamera, QCARManagerImpl.WordData[] newWordData, QCARManagerImpl.WordResultData[] wordResults)
 {
     UpdateWords(newWordData, wordResults);
     UpdateWordResultPoses(arCamera, wordResults);
 }
Exemplo n.º 6
0
 public void UpdateWords(Camera arCamera, QCARManagerImpl.WordData[] wordData, QCARManagerImpl.WordResultData[] wordResultData)
 {
     mWordManager.UpdateWords(arCamera, wordData, wordResultData);
 }
 private static void SetImageValues(QCARManagerImpl.ImageHeaderData imageHeader, ImageImpl image)
 {
     image.Width = imageHeader.width;
     image.Height = imageHeader.height;
     image.Stride = imageHeader.stride;
     image.BufferWidth = imageHeader.bufferWidth;
     image.BufferHeight = imageHeader.bufferHeight;
     image.PixelFormat = (Image.PIXEL_FORMAT)imageHeader.format;
 }