Unity 获取水平视野

unity里Camera.fieldOfView 视野是垂直视野,水平视野盛典里好像没有,就自己写了一个
把摄像机视野当做一个四棱锥(如图所示,F,E分别是BC,CD中点),四棱锥底部边长比就是Camera.aspect,

方法1

假设AB是1,
BC: Camera.aspect,
角FPO: 0.5倍的Camera.fieldOfView,
PO: 0.5Mathf.Tan(0.5f * Camera.fieldOfView * Mathf.Deg2Rad),
角OPE: Mathf.Atan(0.5
Camera.aspect /(Mathf.Tan(0.5f * Camera.fieldOfView * Mathf.Deg2Rad)*0.5)) * Mathf.Rad2Deg,
整理: Mathf.Atan(camera.aspect * Mathf.Tan(0.5f * camera.fieldOfView * Mathf.Deg2Rad)) * Mathf.Rad2Deg,
所以水平视野就是
2 * Mathf.Atan(camera.aspect * Mathf.Tan(0.5f * camera.fieldOfView * Mathf.Deg2Rad)) * Mathf.Rad2Deg


方法2 :


按照实际摄像机范围,
PO: 长度是Camera.farClipPlane,
角FPO: 0.5倍的Camera.fieldOfView,
FO: Camera.farClipPlaneMathf.Tan(0.5f * Camera.fieldOfView * Mathf.Deg2Rad),
DE: 2
Camera.farClipPlaneMathf.Tan(0.5f * Camera.fieldOfView * Mathf.Deg2Rad),
BC: Camera.aspect
2Camera.farClipPlaneMathf.Tan(0.5f * Camera.fieldOfView * Mathf.Deg2Rad),
OE: Camera.aspectCamera.farClipPlaneMathf.Tan(0.5f * Camera.fieldOfView * Mathf.Deg2Rad),
角OPE: Mathf.Atan(camera.aspectCamera.farClipPlane Mathf.Tan(0.5f * camera.fieldOfView * Mathf.Deg2Rad)/Camera.farClipPlane) * Mathf.Rad2Deg,
整理: Mathf.Atan(camera.aspect * Mathf.Tan(0.5f * camera.fieldOfView * Mathf.Deg2Rad)) * Mathf.Rad2Deg,
所以水平视野就是 2 * Mathf.Atan(camera.aspect * Mathf.Tan(0.5f * camera.fieldOfView * Mathf.Deg2Rad)) * Mathf.Rad2Deg
在这里插入图片描述
代码:

    /// <summary>
    /// 计算水平视野(单位:度)
    /// </summary>
    float ComputeHFOV(Camera camera)
     {
        return 2 * Mathf.Atan(camera.aspect * Mathf.Tan(0.5f * camera.fieldOfView * Mathf.Deg2Rad)) * Mathf.Rad2Deg;
    }
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值