public ProjectorCamera(ProjectorData projectorData)
        {
            // Take the inverse because we need to map projector's center to origin.
            Matrix4x4 worldToCameraMatrix = projectorData.pose.inverse;
            // Reflect in z axis because worldToCameraMatrix is OpenGL convention.
            // It uses negative z axis as the direction the camera looks in.
            worldToCameraMatrix = Matrix4x4.Scale(new Vector3(1, 1, -1)) * worldToCameraMatrix;
            // Flip x translation, and y, z rotations to account for left-handedness
            worldToCameraMatrix[0, 3] = -worldToCameraMatrix[0, 3];
            worldToCameraMatrix[0, 1] = -worldToCameraMatrix[0, 1];
            worldToCameraMatrix[1, 0] = -worldToCameraMatrix[1, 0];
            worldToCameraMatrix[0, 2] = -worldToCameraMatrix[0, 2];
            worldToCameraMatrix[2, 0] = -worldToCameraMatrix[2, 0];
            Camera.main.worldToCameraMatrix = worldToCameraMatrix;

            Matrix4x4 projectionMatrix = GraphicsTransforms.ProjectionFromIntrinsicCamera(
                projectorData.cameraMatrix, projectorData.width, projectorData.height);
            Camera.main.projectionMatrix = projectionMatrix;

            ProjectedRect = new ProjectionRect(GetProjectedPoints());
        }