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

        trackableBehaviour.transform.rotation =
                arCamera.transform.rotation *
                camToTargetPose.orientation *
                Quaternion.AngleAxis(270, Vector3.left);
    }
Ejemplo n.º 2
0
    // Position the camera relative to a Trackable.
    protected void PositionCamera(TrackableBehaviour trackableBehaviour,
                                  Camera arCamera,
                                  QCARManager.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);
    }    
Ejemplo n.º 3
0
    // Method used to update poses of all active Image Targets
    // in the scene
    public void UpdateTrackablePoses(Camera arCamera,
                            QCARManager.TrackableData[] trackableDataArray,
                            int originTrackableID)
    {
        if (mActiveDataSet == null)
        {
            return;
        }

        foreach (QCARManager.TrackableData trackableData in trackableDataArray)
        {
            // For each Trackable data struct from native
            DataSetTrackableBehaviour trackableBehaviour;
            if (mActiveDataSet.TryGetTrackableByID(trackableData.id,
                                                   out trackableBehaviour))
            {                
                // 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) &&
                        trackableBehaviour.enabled)
                {
                    // The Trackable object is visible and enabled,
                    // move it into position in relation to the camera
                    // (which we moved earlier)
                    PositionTrackable(trackableBehaviour, arCamera,
                                      trackableData.pose);
                }
            }
        }

        // Update each Trackable
        // Do this once all Trackables have been moved into place
        foreach (QCARManager.TrackableData trackableData in trackableDataArray)
        {
            DataSetTrackableBehaviour trackableBehaviour;
            if (mActiveDataSet.TryGetTrackableByID(trackableData.id,
                                                   out trackableBehaviour))
            {
                if (trackableBehaviour.enabled)
                {
                    trackableBehaviour.OnTrackerUpdate(
                                            trackableData.status);
                }
            }
        }
    }
Ejemplo n.º 4
0
    public void UpdateCameraPose(Camera arCamera,
                                 QCARManager.TrackableData[] trackableDataArray,
                                 int originTrackableID)
    {
        if (mActiveDataSet == null)
        {
            return;
        }

        // If there is a World Center Trackable use it to position the camera.
        if (originTrackableID >= 0)
        {
            foreach (QCARManager.TrackableData trackableData in trackableDataArray)
            {
                if (trackableData.id == originTrackableID)
                {
                    if (trackableData.status ==
                        TrackableBehaviour.Status.DETECTED
                        || trackableData.status ==
                        TrackableBehaviour.Status.TRACKED)
                    {
                        DataSetTrackableBehaviour originTrackable = null;
                        if (mActiveDataSet.TryGetTrackableByID(originTrackableID,
                            out originTrackable))
                        {
                            if (originTrackable.enabled)
                            {
                                PositionCamera(originTrackable, arCamera,
                                               trackableData.pose);
                            }
                        }
                    }
                    break;
                }
            }
        }
    }