Unity 3d镜头适配,分辨率aspect和fov的关系

屏幕分辨率(camera.aspect)和camera fov关系如上图

怎么根据不同分辨率算出对应的fov来适配

假设距离为distance = 1000 默认fov = 35

知道距离和角度算默认屏幕高度

double Height = 2.0 * distance * Mathf.Tan(fov * 0.5f * Mathf.Deg2Rad);

这里算出对应的屏幕高度,以1920*1080分辨率为准,计算当前屏幕高度(aspect是camera.aspect

float currentHeight = (float)Height * (1920f / 1080f) / aspect;

知道屏幕高度和距离计算对应的角度,就是fov

float CurrentFov = 2 * Mathf.Atan(currentHeight  * 0.5f / distance ) * Mathf.Rad2Deg;

代码如下:

    public static float CameraView(float aspect,float fov)
    {
        double frustumHeight = 2.0 * 1000 * Mathf.Tan(fov * 0.5f * Mathf.Deg2Rad);
        float CurrentFov = 2 * Mathf.Atan((float)frustumHeight * (1920f / 1080f) / aspect * 0.5f / 1000) * Mathf.Rad2Deg;
        if(CurrentFov > fov)
        {
            return CurrentFov;
        }
        return fov;
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值