protected virtual void Update()
    {
        if (!showLandmarks)
        {
            disableLandmarkAndNodes();
            return;
        }

        // Get recognition result
        GetResult(ref result_);

        // Set pose
        if (result_.isRecognized_)
        {
            smartar.Vector3    rotPosition;
            smartar.Quaternion rotRotation;
            smartar.Rotation   screenRotation = GetScreenRotation();
            smartar.Rotation   cameraRotation = GetCameraRotation();
            SmartARController.adjustPose(
                cameraRotation, screenRotation, IsFlipX(), IsFlipY(),
                result_.position_, result_.rotation_, out rotPosition, out rotRotation);

            // Draw nodePoints in unity
            if (result_.numNodePoints_ > 0)
            {
                IntPtr nodePointPtr = result_.nodePoints_;

                // for drawing
                Color nodePointColor = new Color(1.0f, 1.0f, 1.0f, 1.0f);

                for (int i = 0; i < result_.maxNodePoints_; i++)
                {
                    // get a current nodePoint
                    smartar.NodePoint curNodePoint = (smartar.NodePoint)Marshal.PtrToStructure(nodePointPtr, typeof(smartar.NodePoint));

                    if (i < result_.numNodePoints_)
                    {
                        // set position and rotation for nodePoint
                        smartar.Vector3    rotNodePosition;
                        smartar.Quaternion rotNodeRotation;
                        SmartARController.adjustPose(
                            GetCameraRotation(), screenRotation, IsFlipX(), IsFlipY(),
                            curNodePoint.position_, result_.rotation_, out rotNodePosition, out rotNodeRotation);
                        SetPose(nodePointObjects_[i].transform, result_, rotNodePosition);
                        nodePointObjects_[i].GetComponent <Renderer>().material.SetColor("_Color", nodePointColor);
                        nodePointObjects_[i].SetActive(true);
                        //Debug.Log ("nodePointObjects_[" + i + "].transform.position = " + nodePointObjects_[i].transform.position);
                    }
                    else
                    {
                        nodePointObjects_[i].SetActive(false);
                    }

                    // go to a next ptr
                    nodePointPtr = new IntPtr(nodePointPtr.ToInt64() + (Int64)Marshal.SizeOf(curNodePoint));
                }
            }

            // Draw landmarks in unity
            if (result_.numLandmarks_ > 0)
            {
                IntPtr landmarkPtr = result_.landmarks_;

                // for drawing
                Color landmarkColor;

                for (int i = 0; i < result_.maxLandmarks_; i++)
                {
                    // get a current landmark
                    smartar.Landmark curLandmark = (smartar.Landmark)Marshal.PtrToStructure(landmarkPtr, typeof(smartar.Landmark));

                    if (i < result_.numLandmarks_)
                    {
                        // set position and rotation for landmarks
                        smartar.Vector3    rotLandmarkPosition;
                        smartar.Quaternion rotLandmarkRotation;
                        SmartARController.adjustPose(
                            GetCameraRotation(), screenRotation, IsFlipX(), IsFlipY(),
                            curLandmark.position_, result_.rotation_, out rotLandmarkPosition, out rotLandmarkRotation);
                        SetPose(landmarkObjects_[i].transform, result_, rotLandmarkPosition);

                        // set color
                        switch (curLandmark.state_)
                        {
                        case smartar.LandmarkState.LANDMARK_STATE_TRACKED:
                            landmarkColor = new Color(0.0f, 1.0f, 0.0f, 1.0f);
                            break;

                        case smartar.LandmarkState.LANDMARK_STATE_LOST:
                            landmarkColor = new Color(1.0f, 0.0f, 0.0f, 1.0f);
                            break;

                        case smartar.LandmarkState.LANDMARK_STATE_SUSPENDED:
                            landmarkColor = new Color(0.0f, 1.0f, 1.0f, 1.0f);
                            break;

                        case smartar.LandmarkState.LANDMARK_STATE_MASKED:
                            landmarkColor = new Color(1.0f, 1.0f, 0.0f, 1.0f);
                            break;

                        default:
                            landmarkColor = new Color(0.0f, 0.0f, 0.0f, 1.0f);
                            break;
                        }
                        landmarkObjects_[i].GetComponent <Renderer>().material.SetColor("_Color", landmarkColor);
                        landmarkObjects_[i].SetActive(true);
                        //Debug.Log ("landmarkObjects_[" + i + "].transform.position = " + landmarkObjects_[i].transform.position);
                    }
                    else
                    {
                        landmarkObjects_[i].SetActive(false);
                    }

                    // go to a next ptr
                    landmarkPtr = new IntPtr(landmarkPtr.ToInt64() + (Int64)Marshal.SizeOf(curLandmark));
                }
            }
        }
        else
        {
            disableLandmarkAndNodes();
        }
    }
Beispiel #2
0
 protected override void callAdjustPose(smartar.Vector3 srcPosition, smartar.Quaternion srcRotation, out smartar.Vector3 rotPosition, out smartar.Quaternion rotRotation)
 {
     smartar.Rotation screenRotation = GetScreenRotation();
     smartar.Rotation cameraRotation = GetCameraRotation();
     SmartARController.adjustPose(cameraRotation, screenRotation, IsFlipX(), IsFlipY(), srcPosition, srcRotation, out rotPosition, out rotRotation);
 }