Пример #1
0
        private static void onFrameUpdate(InsightARResult insightResult, IntPtr pHandler)
        {
            InsightARState arState = (InsightARState)insightResult.state;

//			Debug.Log("-ar- onFrameUpdate:"+insightResult.state);
            if (arState == InsightARState.Initing || arState == InsightARState.Init_Fail ||
                arState == InsightARState.Detect_Fail || arState == InsightARState.Track_Fail ||
                arState == InsightARState.Track_Stop || arState == InsightARState.Uninitialized)
            {
                trackResult.state = insightResult.state;
            }
            else
            {
                trackResult = insightResult;
            }
        }
Пример #2
0
    void Update()
    {
        #if UNITY_ANDROID
        if (QuitOnEscOrBack && Input.GetKeyDown(KeyCode.Escape))
        {
            DoStopAR();
            SceneManager.LoadScene("login");
        }
        #endif

        if (!isRunningAR)
        {
            return;
        }

        m_ARInterface.Update();

        updateStatusLabel();

        InsightARState arState = m_ARInterface.CurrentState;

        if (arState == InsightARState.Tracking || arState == InsightARState.Track_Limited)
        {
            if (_axis != null)
            {
                _axis.SetActive(true);
            }

            if (_enableShowIndicator)
            {
                Vector3 camPos = Camera.main.transform.position;
                Vector3 hitPos = camPos + Camera.main.transform.forward * hitDist;
                if (_indicator != null)
                {
                    _indicator.SetActive(true);
                    _indicator.transform.position = hitPos;
                    MeshRenderer r = _indicator.GetComponent <MeshRenderer>();
                    if (r != null)
                    {
                        r.sharedMaterial.SetColor("_Color", Color.white);
                    }
                }
            }
            else
            {
                if (_indicator != null)
                {
                    _indicator.SetActive(false);
                }
            }
        }
        else
        {
            if (_axis != null)
            {
                _axis.SetActive(false);
            }
            if (_cube != null)
            {
                _cube.SetActive(false);
            }
            if (_indicator != null)
            {
                _indicator.SetActive(false);
            }
        }

        if (Input.touchCount > 0 && !hasObjectCreated)
        {
            var touch = Input.GetTouch(0);
            if (touch.phase == TouchPhase.Began || touch.phase == TouchPhase.Moved)
            {
                InsightARUserHitAnchor userHitAnchor = m_ARInterface.GetHitTestResult(touch);
                if (userHitAnchor.isValid == 1)
                {
                    _enableShowIndicator = false;
                    if (_cube != null)
                    {
                        hasObjectCreated = true;
                        _cube.SetActive(true);
                        _cube.transform.position = userHitAnchor.position;
                        _cube.transform.rotation = userHitAnchor.rotation;
                    }
                }
            }
        }
    }
Пример #3
0
        private void UpdateInsightAR()
        {
            InsightARState arState = (InsightARState)trackResult.state;

            if (arState <= InsightARState.Uninitialized)
            {
                return;
            }
            if (arState == InsightARState.Init_Fail)
            {
                StopAR();
                return;
            }
                        #if UNITY_ANDROID
            if (InsightARNative.isUseHWAR())
            {
                float[] arr = new float[16];
                InsightARNative.getHWARProjectionMatrix(arr, mARCamera.nearClipPlane, mARCamera.farClipPlane);

                Vector4[] cols = new Vector4[4];
                for (int i = 0; i < 4; i++)
                {
                    cols[i].x = arr[i * 4 + 0];
                    cols[i].y = arr[i * 4 + 1];
                    cols[i].z = arr[i * 4 + 2];
                    cols[i].w = arr[i * 4 + 3];
                }

                Matrix4x4 mat = Matrix4x4.identity;
                mat.SetColumn(0, cols[0]);
                mat.SetColumn(1, cols[1]);
                mat.SetColumn(2, cols[2]);
                mat.SetColumn(3, cols[3]);
                mARCamera.projectionMatrix = mat;
            }
            else
                        #endif
            {
                if (arState > InsightARState.Uninitialized && mARCamera.fieldOfView != trackResult.param.fov [1])
                {
                    mARCamera.fieldOfView = trackResult.param.fov [1];
                }
            }
            if (arState == InsightARState.Initing || arState == InsightARState.Init_Fail ||
                arState == InsightARState.Detect_Fail || arState == InsightARState.Track_Fail ||
                arState == InsightARState.Track_Stop || arState == InsightARState.Uninitialized)
            {
                return;
            }
                        #if UNITY_ANDROID
            if (InsightARNative.isUseHWAR())
            {
                Vector3    camPos;
                Quaternion camRot;
                InsightARMath.Cvt_GLPose_UnityPose(
                    trackResult.camera.center, trackResult.camera.quaternion, out camPos, out camRot);

                trackResult.camera.center_u3d[0]     = camPos.x;
                trackResult.camera.center_u3d[1]     = camPos.y;
                trackResult.camera.center_u3d[2]     = camPos.z;
                trackResult.camera.quaternion_u3d[0] = camRot.x;
                trackResult.camera.quaternion_u3d[1] = camRot.y;
                trackResult.camera.quaternion_u3d[2] = camRot.z;
                trackResult.camera.quaternion_u3d[3] = camRot.w;

                mARCamera.transform.position = camPos;
                mARCamera.transform.rotation = camRot;
            }
            else
                        #endif
            {
                mARCamera.transform.localPosition = new Vector3(
                    trackResult.camera.center_u3d[0],
                    trackResult.camera.center_u3d[1],
                    trackResult.camera.center_u3d[2]);
                mARCamera.transform.localRotation = new Quaternion(
                    trackResult.camera.quaternion_u3d[0],
                    trackResult.camera.quaternion_u3d[1],
                    trackResult.camera.quaternion_u3d[2],
                    trackResult.camera.quaternion_u3d[3]
                    );
            }
        }