Unity学习笔记 关于Unity相机的FOV以及水平FOV和垂直FOV之间的转换

这篇具有很好参考价值的文章主要介绍了Unity学习笔记 关于Unity相机的FOV以及水平FOV和垂直FOV之间的转换。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

关于FOV
FOV 是在任何给定时间通过人眼、相机取景器或在显示屏上可见的可观察世界的范围。它指的是整个区域的覆盖范围,而不是单个固定焦点。FOV 还描述了一个人可以看到可见世界的角度。
FOV 越宽,可以看到的可观察世界就越多。它是水平、垂直和对角线测量的。相机镜头、其焦距和传感器尺寸都在确定 FOV 方面发挥作用。
FOV一般可以分为三种类型, 分别是对角线FOV ,垂直FOV, 水平FOV
Unity学习笔记 关于Unity相机的FOV以及水平FOV和垂直FOV之间的转换
在Unity中的相机属性里,可以对相机的视野轴进行设置,详见:Camera component

FOV Axis (when Perspective is selected) 视野轴
Horizontal 摄像机使用水平视野轴
Vertical 摄像机使用垂直视野轴

Unity学习笔记 关于Unity相机的FOV以及水平FOV和垂直FOV之间的转换
Unity学习笔记 关于Unity相机的FOV以及水平FOV和垂直FOV之间的转换
但是需要注意的是,如果通过代码对相机的Camera.fieldOfView进行赋值,是对相机的垂直FOV进行赋值。也就是说尽管在Camera的属性里设置了使用水平视野轴,通过代码赋值的话需要自行进行计算转换来赋值。
Unity学习笔记 关于Unity相机的FOV以及水平FOV和垂直FOV之间的转换文章来源地址https://www.toymoban.com/news/detail-473683.html

如何将水平FOV转垂直FOV

  • 方法1:手动计算(适用任何情况的FOV转换)
	/// <summary>
    /// 将垂直FOV转成水平FOV
    /// </summary>
    /// <param name="verFOV">垂直FOV值</param>
    /// <param name="aspect">屏幕分辨率比例</param>
    /// <returns></returns>
    public static float ConvertVerticalFOVToHorizontally(float verFOV, float aspect)
    {
        // 垂直fov角度转成弧度
        float verFovRadian = verFOV * Mathf.Deg2Rad;
        // 算出视野高度的一半
        float camHalfHeight = Mathf.Tan(verFovRadian / 2);
        // 算出水平视野的弧度
        float horFOVRadian = Mathf.Atan(camHalfHeight * aspect) * 2;
        // 将水平视野弧度转成角度
        float horFOV = horFOVRadian * Mathf.Rad2Deg;

        return horFOV;
    }
  • 方法2:UnityEngine.Camera类提供api(适用于Unity内)
	/// <summary>
    /// 将垂直FOV转成水平FOV
    /// </summary>
    /// <param name="verFOV">垂直FOV值</param>
    /// <param name="aspect">屏幕分辨率比例</param>
    /// <returns></returns>
    public static float ConvertVerticalFOVToHorizontally(float verFOV, float aspect)
    {
        return Camera.VerticalToHorizontalFieldOfView(verFOV, aspect)}

如何将垂直FOV转水平FOV

  • 方法1:手动计算(适用任何情况的FOV转换)
	/// <summary>
    /// 将水平FOV转成垂直FOV
    /// </summary>
    /// <param name="horFOV">水平FOV</param>
    /// <param name="aspect">屏幕分辨率比例</param>
    /// <returns></returns>
    public static float ConvertHorizontalFOVToVertically(float horFOV, float aspect)
    {
        // 水平fov角度转成弧度
        float horFOVRadian = horFOV * Mathf.Deg2Rad;
        // 算出视野宽度的一半
        float camHalfWidth = Mathf.Tan(horFOVRadian / 2);
        // 算出垂直视野的弧度
        float verFOVRadian = Mathf.Atan(camHalfWidth / aspect) * 2;
        // 将垂直视野弧度转成角度
        float verFOV = verFOVRadian * Mathf.Rad2Deg;
        
        return verFOV;
    }
  • 方法2:UnityEngine.Camera类提供api(适用于Unity内)
	/// <summary>
    /// 将水平FOV转成垂直FOV
    /// </summary>
    /// <param name="horFOV">水平FOV</param>
    /// <param name="aspect">屏幕分辨率比例</param>
    /// <returns></returns>
    public static float ConvertHorizontalFOVToVertically(float horFOV, float aspect)
    {
        return Camera.HorizontalToVerticalFieldOfView(horFOV, aspect)}

到了这里,关于Unity学习笔记 关于Unity相机的FOV以及水平FOV和垂直FOV之间的转换的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • CSS实现盒子模型水平居中、垂直居中、水平垂直居中的多种方法

    水平居中效果图 水平居中 全局样式 第一种:margin+width 这种方法适用于已经知道width的盒子,实现起来比较简单 第二种:text-align+inline-block 这种方法适用于多种场景(width不固定) 第三种:float+position 这种方法适用于多种场景(width不固定) 第四种: 这种方法适用于多种场

    2024年02月09日
    浏览(54)
  • 关于Unity使用Aspose.Words创建表格单元格垂直合并不生效情况说明

    👉一、前言 最近在使用Aspose.Words.dll实现创建表格功能时,遇到了一个让我费解了好几天的问题——单元格垂直合并失效。我都快要怀疑人生了都,关键是它水平合并没问题,而且创建别的表格垂直合并也没问题;况且经过我反复测试,代码逻辑也是没有问题的,你说这气不

    2023年04月11日
    浏览(44)
  • 微信小程序23__flex布局 相关的3种居中: 水平居中_垂直居中_水平垂直居中

    类似这样写法 display:  flex; flex-direction:  column;                //垂直布局 align-items:  center;                    // 水平居中     justify-content:  space-around; //垂直方向分散布局 类似这样写法 display:  flex; flex-direction: row;          //水平布局       align-items: center;    

    2024年02月03日
    浏览(34)
  • 水平越权&垂直越权

    1、水平越权-同级用户权限共享 2、垂直越权-低高用户权限共享 3、访问控制-验证丢失取消验证脆弱验证 4、脆弱验证-CookieTokenJwt等 水平越权 就是同级用户之间的越权,打个比方现在有ABC三个用户,A是管理员,BC都是普通用户,现在B能够使用C这个用户的权限这就是水平越权

    2024年02月04日
    浏览(40)
  • 水平越权与垂直越权

    越权,顾名思义,就是超出了权限或权力范围。多数WEB应用都具备权限划分和控制,但是如果权限控制功能设计存在缺陷,那么攻击者就可以通过这些缺陷来访问未经授权的功能或数据,这就是我们通常说的越权漏洞。攻击者越权后就可以进行一些操作,例如查看敏感信息、

    2023年04月11日
    浏览(31)
  • 块、行内块水平垂直居中

    1.定位实现水平垂直居中 2.定位+位移 3.相对于整个视口水平垂直居中 4.flex+margin   5. flex 水平垂直居中 6.遮挡层

    2024年02月13日
    浏览(27)
  • CSS水平垂直居中

    1.利用定位 + margin:auto 2.flex布局 3.grid布局 一、利用position+margin:auto  二、利用flex 三、gird布局

    2024年02月14日
    浏览(34)
  • 居中一个元素(水平+垂直居中)

    我们的示例代码全在此基础上修改: 具体原理参考下面这篇博客: flex 弹性布局_本郡主是喵的博客-CSDN博客 对于内容是 行内式元素(内容大小撑起标签宽高)或文字, 是有效的。 line-heignt == height ,能使文字垂直对齐,text-align:center,能使内容居中水平对齐 父元素,采用相对布局,

    2024年02月11日
    浏览(28)
  • 水平越权、垂直越权、防范措施

    一、越权简介 越权 :权限控制功能设计存在缺陷,攻击者就可以通过这些缺陷来访问未经授权的功能或数据。基于数据的访问控制设计缺陷引起。 越权 : 水平越权 、 垂直越权 二、水平越权 水平越权 : 权限相等者互相越权 。 A账号和B账号都可以访问这个功能,但是A账号

    2024年02月09日
    浏览(31)
  • 垂直分表、水平分表详解

    什么是垂直分表 垂直分表就是把一张表按列分为多张表,多张表通过主键进行关联,从而组成完整的数据。 分表之后,每张表的结构都不相同。 垂直分表不需要额外引用其他组件,需要到Repository层面建立好表映射即可。 根据什么分表呢? 根据数据是否是热点数据划分。

    2024年02月08日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包