Field of View(FOV)视野 水平角度与垂直角度切换计算
_白白可乐
2022年06月03日 00:14
收录于文集
共23篇

FOV是啥大家都知道

FOV示意图

在Unity中就是指相机在透视模式(Perspective)下视野的角度,也就是上图 ∠θ,默认是垂直方向的角度,但是有的时候计算需要水平方向的角度,那么如何根据垂直方向的视角求出水平方向的视角呢?

可以看看草图:

草图

其中∠AMB就是垂直方向视角,∠ALG就是水平方向视角,利用半角的正切值我们可以很轻松地构建两者之间的联系.公式就不写了,大家看看代码就能理解...

代码块
C#
自动换行
复制代码
	 /// <summary>
    /// 把垂直方向的FOV角度转化为水平方向的FOV角度
    /// </summary>
    /// <param name="d">垂直方向FOV角度</param>
    /// <returns></returns>
    public static float FOVChangeV2H(this float d)
    {
        var scale = Screen.width / (float)Screen.height;
        return Mathf.Atan(Mathf.Tan(d/2 * Mathf.Deg2Rad) * scale) * 2 * Mathf.Rad2Deg;
    }
    /// <summary>
    /// 把水平方向的FOV角度转化为水平方向的FOV角度
    /// </summary>
    /// <param name="d">水平方向的FOV角度</param>
    /// <returns></returns>
    public static float FOVChangeH2V(this float d)
    {
        var scale = Screen.height / (float)Screen.width;
        return Mathf.Atan(Mathf.Tan(d/2 * Mathf.Deg2Rad) * scale) * 2 * Mathf.Rad2Deg;
    }
复制成功

总而言之,利用三角函数就能很轻松的转换水平方向与垂直方向的FOV角度.