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; } }
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; } } } } }
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] ); } }