示例#1
0
        public static Matrix4x4 GetAlternateLandscapeProjectionMatrix()
        {
            //Debug.Log("landscape hfov=" + Constants.CAM_LARGE_FOV + " vfov=" + Constants.CAM_SMALL_FOV);

            float[] mat_data = new float[16];
            PikkartARCore.GetProjectionMatrix(mat_data);

            /*alternateLandscapeProjectionMatrix.m00 = mat_data[0];
             * alternateLandscapeProjectionMatrix.m01 = mat_data[1];
             * alternateLandscapeProjectionMatrix.m02 = mat_data[2];
             * alternateLandscapeProjectionMatrix.m03 = mat_data[3];
             *
             * alternateLandscapeProjectionMatrix.m10 = mat_data[4];
             * alternateLandscapeProjectionMatrix.m11 = mat_data[5];
             * alternateLandscapeProjectionMatrix.m12 = mat_data[6];
             * alternateLandscapeProjectionMatrix.m13 = mat_data[7];
             *
             * alternateLandscapeProjectionMatrix.m20 = mat_data[8];
             * alternateLandscapeProjectionMatrix.m21 = mat_data[9];
             * alternateLandscapeProjectionMatrix.m22 = mat_data[10];
             * alternateLandscapeProjectionMatrix.m23 = mat_data[11];
             *
             * alternateLandscapeProjectionMatrix.m30 = mat_data[12];
             * alternateLandscapeProjectionMatrix.m31 = mat_data[13];
             * alternateLandscapeProjectionMatrix.m32 = mat_data[14];
             * alternateLandscapeProjectionMatrix.m33 = mat_data[15];*/

            //horizontal field of view = 2 atan(0.5 width / focallength)
            double v         = 1.0 / (double)(mat_data[0]);
            double at        = Math.Atan(v);
            double hfov      = 2.0 * at;
            float  camera_ar = Constants.CAMERA_REQUESTED_WIDTH / Constants.CAMERA_REQUESTED_HEIGHT;
            float  t         = ScreenUtilities.GetPortraitAspectRatio() * camera_ar * (float)Math.Tan(hfov / 2.0);
            float  a         = 2.0f * (float)Math.Atan((double)(t)) * 57.2958f;

            alternateLandscapeProjectionMatrix = Matrix4x4.Perspective(
                a,
                ScreenUtilities.GetLandscapeAspectRatio(),
                Constants.NEAR_CLIP_PLANE,
                Constants.FAR_CLIP_PLANE);

            return(alternateLandscapeProjectionMatrix);
        }
示例#2
0
        public static Matrix4x4 GetAlternatePortraitProjectionMatrix()
        {
            //Debug.Log("portrait hfov=" + Constants.CAM_LARGE_FOV + " vfov=" + Constants.CAM_SMALL_FOV);

            float[] mat_data = new float[16];
            PikkartARCore.GetProjectionMatrix(mat_data);

            /*alternateLandscapeProjectionMatrix.m00 = mat_data[0];
             * alternateLandscapeProjectionMatrix.m01 = mat_data[1];
             * alternateLandscapeProjectionMatrix.m02 = mat_data[2];
             * alternateLandscapeProjectionMatrix.m03 = mat_data[3];
             *
             * alternateLandscapeProjectionMatrix.m10 = mat_data[4];
             * alternateLandscapeProjectionMatrix.m11 = mat_data[5];
             * alternateLandscapeProjectionMatrix.m12 = mat_data[6];
             * alternateLandscapeProjectionMatrix.m13 = mat_data[7];
             *
             * alternateLandscapeProjectionMatrix.m20 = mat_data[8];
             * alternateLandscapeProjectionMatrix.m21 = mat_data[9];
             * alternateLandscapeProjectionMatrix.m22 = mat_data[10];
             * alternateLandscapeProjectionMatrix.m23 = mat_data[11];
             *
             * alternateLandscapeProjectionMatrix.m30 = mat_data[12];
             * alternateLandscapeProjectionMatrix.m31 = mat_data[13];
             * alternateLandscapeProjectionMatrix.m32 = mat_data[14];
             * alternateLandscapeProjectionMatrix.m33 = mat_data[15];*/
            double v    = 1.0 / (double)(mat_data[0]);
            double at   = Math.Atan(v);
            double hfov = 2.0 * at * 57.2958;

            alternatePortraitProjectionMatrix = Matrix4x4.Perspective(
                (float)hfov,
                ScreenUtilities.GetPortraitAspectRatio(),
                Constants.NEAR_CLIP_PLANE,
                Constants.FAR_CLIP_PLANE);

            return(alternatePortraitProjectionMatrix);
        }