public static Matrix4x4 GetEyeFromHeadMatrix(CardboardEye eye)
        {
            if (eyeFromHeadMatrixLeft == null || eyeFromHeadMatrixRight == null)
            {
                RefreshProjectionMatrix();
            }

            float[] targetMatrix = eye == CardboardEye.kLeft ? eyeFromHeadMatrixLeft : eyeFromHeadMatrixRight;

            return(CardboardUtility.ArrayToMatrix4x4(targetMatrix));
        }
        public static void RetrieveCardboardDeviceV1Params()
        {
            CardboardQrCode_getCardboardV1DeviceParams(ref _encodedDeviceParams, ref _paramsSize);

            Debug.Log("CardboardQrCode.RetrieveCardboardDeviceV1Params() size=" + _paramsSize);
            encodedBytes = ReadByteArray(_encodedDeviceParams, _paramsSize);

            if (_paramsSize > 0)
            {
                decodedParams = DeviceParams.Parser.ParseFrom(encodedBytes);
            }

            Debug.LogFormat("CardboardQrCode.RetrieveCardboardDeviceV1Params() decode device params: \r\n{0}",
                            CardboardUtility.DeviceParamsToString(decodedParams));
        }
        private static void RefreshCamera_Eye(Camera eyeCam, Matrix4x4 projectionMat, Matrix4x4 eyeFromHeadMat)
        {
            if (!projectionMat.Equals(Matrix4x4.zero))
            {
                eyeCam.projectionMatrix = projectionMat;
            }

            //https://github.com/googlevr/cardboard/blob/master/sdk/lens_distortion.cc
            if (!eyeFromHeadMat.Equals(Matrix4x4.zero))
            {
                Pose eyeFromHeadPoseGL = CardboardUtility.GetPoseFromTRSMatrix(eyeFromHeadMat);
                eyeFromHeadPoseGL.position.x   = -eyeFromHeadPoseGL.position.x;
                eyeCam.transform.localPosition = eyeFromHeadPoseGL.position;
                eyeCam.transform.localRotation = eyeFromHeadPoseGL.rotation;
            }
        }
        public static void RetrieveDeviceParam()
        {
            CardboardQrCode_getSavedDeviceParams(ref _encodedDeviceParams, ref _paramsSize);

            Debug.Log("CardboardQrCode.RetrieveDeviceParam() size=" + _paramsSize);
            encodedBytes = ReadByteArray(_encodedDeviceParams, _paramsSize);

            if (_paramsSize > 0)
            {
                decodedParams = DeviceParams.Parser.ParseFrom(encodedBytes);
            }

            // Debug.LogFormat("CardboardQrCode.RetrieveDeviceParam() params length={0}, byte=\r\n {1}",
            //     encodedBytes.Length, string.Join(" , ", encodedBytes));
            Debug.LogFormat("CardboardQrCode.RetrieveDeviceParam() decode device params: \r\n{0}",
                            CardboardUtility.DeviceParamsToString(decodedParams));
        }
        private static void InitCameraProperties()
        {
            if (!isProfileAvailable)
            {
                return;
            }

            CardboardLensDistortion.RetrieveEyeMeshes();
            CardboardLensDistortion.RefreshProjectionMatrix();

            projectionMatrixLeft  = CardboardLensDistortion.GetProjectionMatrix(CardboardEye.kLeft);
            projectionMatrixRight = CardboardLensDistortion.GetProjectionMatrix(CardboardEye.kRight);

            eyeFromHeadMatrixLeft  = CardboardLensDistortion.GetEyeFromHeadMatrix(CardboardEye.kLeft);
            eyeFromHeadMatrixRight = CardboardLensDistortion.GetEyeFromHeadMatrix(CardboardEye.kRight);

            (CardboardMesh, CardboardMesh)eyeMeshes = CardboardLensDistortion.GetEyeMeshes();
            viewMeshLeftRaw  = eyeMeshes.Item1;
            viewMeshRightRaw = eyeMeshes.Item2;

            viewMeshLeft  = CardboardUtility.ConvertCardboardMesh_Triangle(eyeMeshes.Item1);
            viewMeshRight = CardboardUtility.ConvertCardboardMesh_Triangle(eyeMeshes.Item2);
        }
 private static void CardboardLensDistortion_getProjectionMatrix(IntPtr lens_Distortion, CardboardEye eye,
                                                                 float z_near, float z_far, float[] projection_matrix)
 {
     CardboardUtility.Matrix4x4ToArray(Matrix4x4.Perspective(70, 0.8f, 0.5f, 1000)).CopyTo(projection_matrix, 0);
 }
 private static void CardboardLensDistortion_getDistortionMesh(
     IntPtr lens_Distortion, CardboardEye eye, ref CardboardMesh mesh)
 {
     mesh = CardboardUtility.CreateMockupCardboardMesh(eye);
 }