ForceXRCardobardFOV

 avatar
unknown
csharp
3 years ago
1.1 kB
4
Indexable
Camera cam;

void Awake()
    {
        cam = Camera.main;
    }
    
Matrix4x4 mat;
float aspect, zNear, zFar;
public void SetStereoFov(float fov)
    {
        //Left eye
        mat = cam.GetStereoProjectionMatrix(Camera.StereoscopicEye.Left);
        GetProjectionMatrixParameters(mat, out aspect, out zNear, out zFar);
        cam.SetStereoProjectionMatrix(Camera.StereoscopicEye.Left, Matrix4x4.Perspective(fov, aspect, zNear, zFar));

        //Right eye
        mat = cam.GetStereoProjectionMatrix(Camera.StereoscopicEye.Right);
        GetProjectionMatrixParameters(mat, out aspect, out zNear, out zFar);
        cam.SetStereoProjectionMatrix(Camera.StereoscopicEye.Right, Matrix4x4.Perspective(fov, aspect, zNear, zFar));
    }

    void GetProjectionMatrixParameters(Matrix4x4 mat, out float aspect, out float zNear, out float zFar)
    {
        float a = mat[0];
        float b = mat[5];
        float c = mat[10];
        float d = mat[14];

        aspect = b / a;

        float k = (c - 1.0f) / (c + 1.0f);
        zNear = (d * (1.0f - k)) / (2.0f * k);
        zFar = k * zNear;
    }
Editor is loading...