// Update is called once per frame void Update() { if (nibiruService != null && nibiruService.IsMarkerRecognizeRunning) { float[] leftEyeArray = nibiruService.GetMarkerViewMatrix(0); float[] rightEyeArray = nibiruService.GetMarkerViewMatrix(1); if (leftEyeArray != null && rightEyeArray != null) { leftEyeArray[12] *= 0.001f * PositonScaleFactor; leftEyeArray[13] *= 0.001f * PositonScaleFactor; leftEyeArray[14] *= 0.001f * PositonScaleFactor; rightEyeArray[12] *= 0.001f * PositonScaleFactor; rightEyeArray[13] *= 0.001f * PositonScaleFactor; rightEyeArray[14] *= 0.001f * PositonScaleFactor; Matrix4x4 matrixRawLeft = ARUtilityFunctions.MatrixFromFloatArray(leftEyeArray); Matrix4x4 matrixRawRight = ARUtilityFunctions.MatrixFromFloatArray(rightEyeArray); Matrix4x4 transformationMatrixLeft = ARUtilityFunctions.LHMatrixFromRHMatrix(matrixRawLeft); Matrix4x4 transformationMatrixRight = ARUtilityFunctions.LHMatrixFromRHMatrix(matrixRawRight); cameraPoseMatLeft = transformationMatrixLeft.inverse; cameraPoseMatRight = transformationMatrixRight.inverse; } float[] array = nibiruService.GetMarkerViewMatrix(); if (array != null) { if (!visible) { if (OnMarkerFoundHandler != null) { OnMarkerFoundHandler(); } visible = true; NxrGlobal.isMarkerVisible = true; for (int i = 0; i < mTransform.childCount; i++) { mTransform.GetChild(i).gameObject.SetActive(true); Debug.Log("MARKER VISBILE " + mTransform.GetChild(i).gameObject.name); } if (origin != null) { Matrix4x4 pose; // If this marker is the base, no need to take base inverse etc. pose = origin.transform.localToWorldMatrix; transform.position = ARUtilityFunctions.PositionFromMatrix(pose); transform.rotation = ARUtilityFunctions.QuaternionFromMatrix(pose); } } // Filter data array = FilterData(array); // Scale the position from ARToolKit units (mm) into Unity units (m). array[12] *= 0.001f * PositonScaleFactor; array[13] *= 0.001f * PositonScaleFactor; array[14] *= 0.001f * PositonScaleFactor; Matrix4x4 matrixRaw = ARUtilityFunctions.MatrixFromFloatArray(array); // Debug.Log("MarkerViewMatrix>>>>" + matrixRaw.ToString()); Matrix4x4 transformationMatrix = ARUtilityFunctions.LHMatrixFromRHMatrix(matrixRaw); cameraPoseMat = transformationMatrix.inverse; //Debug.Log("transformationMatrix>>>>" + transformationMatrix.ToString()); //Quaternion quaternion = ARUtilityFunctions.QuaternionFromMatrix(transformationMatrix); //Vector3 eulerAngles = quaternion.eulerAngles; // z轴朝上,转换成z轴朝里,符合unity //mTransform.rotation = Quaternion.Euler(eulerAngles.x - 90, eulerAngles.y, eulerAngles.z); //mTransform.position = ARUtilityFunctions.PositionFromMatrix(transformationMatrix); } else if (array == null) { if (visible) { Debug.Log("MARKER VISIBLE -> NOT VISBILE"); } else { Debug.Log("MARKER INIT NOT VISBILE"); } if (OnMarkerLostHandler != null) { OnMarkerLostHandler(); } NxrGlobal.isMarkerVisible = false; visible = false; for (int i = 0; i < mTransform.childCount; i++) { mTransform.GetChild(i).gameObject.SetActive(false); } } } }