前言

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

在Unity中的相机属性里,可以对相机的视野轴进行设置,详见:Camera component

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



但是需要注意的是,如果通过代码对相机的Camera.fieldOfView进行赋值,是对相机的垂直FOV进行赋值。也就是说尽管在Camera的属性里设置了使用水平视野轴,通过代码赋值的话需要自行进行计算转换来赋值。

如何将水平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之间的转换相关推荐

  1. Unity学习笔记 球形全景图平面像素坐标与三维坐标系上的坐标之间的转换

    前言 本文将讲解如何通过球形全景图上的二维坐标通过换算得到三维坐标系上的三维坐标.具体场景就是,已知道一张全景图上某个点的像素位置(px,py),最终可以算出该点对应在球体上的三维坐标(X,Y,Z). ...

  2. 【Unity学习笔记】[Unity中文课堂教程] C#中级编程代码

    [Unity学习笔记][Unity中文课堂教程] C#中级编程代码 最近想补一补C#基础,Unity官方的C#中级编程教程质量很高,于是开个帖子把跟着敲+记录了部分价讲解和我自己的理解的代码存在这 原 ...

  3. Unity学习笔记:Unity 3D 飞机大战

    Unity学习笔记:Unity 3D 飞机大战 1.打开unity软件后,首先新建Quad作为背景,导入飞机模型,并为其添加刚体 然后创建C#脚本,挂载到飞机上. 2.给飞机创建子弹,让子弹成为预制体 ...

  4. 【Unity学习笔记】Unity中的欧拉角(Euler Angle)和万向节(Gimbal)

    声明:此篇文章是个人学习笔记,并非教程,所以内容可能不够严谨.可作参考,但不保证绝对正确.如果你发现我的文章有什么错误,非常欢迎指正,谢谢哦. 目录 1 奇怪的现象 1.2现象一 1.2 现象二 1. ...

  5. Unity学习笔记:unity介绍(一)

    一.Unity是什么? 1.Unity发音[ˈjuːnəti] 2.俗称有U3D,Unity3D.unity 3.Unity开发商是美国的Unity公司,成立于2004年,位于美国旧金山. 4.uni ...

  6. Unity学习笔记5 unity的js转c#

    上一篇已经说过,unity的js是一种变种的js,和真正的js还是有区别的,所以有时候会给人一种有点不伦不类的感觉--如果对于完全没有编程基础的人来说,建议一开始就直接学c#吧,不要浪费时间去学js. ...

  7. Unity学习笔记(8) Unity残影效果整理,3D、2D、通用方案

    Unity做残影效果是个不难的工作. 但是一些细节会对使用方法产生限制,这里整理一下各种情况下推荐的残影效果实现方案 1.3D网格 (高性能) 2.2D人物 (非骨骼动画) (高性能) 3.其它场景 ...

  8. Unity学习笔记——Mesh

    Unity学习笔记--Mesh Unity中的Mesh组件是一个很好玩的东西,这次的目标是根据高程图创建出一个平面. 1.用脚本创建一个简单的三角形 新建空的物体,挂上MeshFilter.MeshR ...

  9. Unity学习笔记1 简易2D横版RPG游戏制作(一)

    这个教程是参考一个YouTube上面的教程做的,原作者的教程做得比较简单,我先参考着做一遍,毕竟我也只是个初学者,还没办法完全自制哈哈.不过我之前也看过一个2D平台游戏的系列教程了,以后会整合起来,做 ...

最新文章

  1. 异地多活实践与设计思考点归纳
  2. python访问数据库如何解决高并发_怎样解决数据库高并发的问题
  3. Java字符串真的不可变吗?
  4. linux xargs 给命令传递参数 组合多个命令
  5. Java:高级之泛型概念引入,泛型可以设置多个类型参数,泛型继承和泛型接口实现,限制泛型可用类型,泛型通配的方式,泛型方法,泛型方法限制泛型可用类型
  6. python parser count_8 个 Python 实用脚本,早掌握早下班!
  7. bupt summer training for 16 #8 ——字符串处理
  8. 云服务器ECS使用限制概览,让你的上云少走一些坑
  9. 让用户感到体贴登录页设计灵感
  10. xstatic图形连接linux,RHCE认证考试模拟题深入讲解:linux配置静态IP地址为:192.168.0.X!...
  11. 【Pytorch】LeNet的pytorch写法
  12. 那些不开源的公司,后来怎么样了?
  13. 74LS系列基本说明
  14. Doom3 couldn't load default.cfg
  15. 【C语言】从字符串中提取IP地址最简洁的方法
  16. 计算机屏幕有条线,电脑屏幕出现一条白线怎么办?电脑显示器中间出现一条线解决方法...
  17. 外贸人如何快速学好英语
  18. 01、uniapp连接MUMU模拟器
  19. 常见算法之Flood Fill算法
  20. uni-app封装请求出现跨域问题

热门文章

  1. JS——修改背景图片
  2. 多个时间序列之间的DTW
  3. 【C生万物】 指针篇 (初级)
  4. 好书推荐丨项目经理有哪些必读书籍?
  5. DeprecationWarning: There is no current event loop loop = asyncio.get_event_loop()
  6. 如何在MCU上通过ToD+PPS 获取同步时间(二)
  7. mysql查询字段按逗号隔开
  8. 《大数据》第1期“应用”——百度大数据应用与实践
  9. python提取首字母的函数_Oracle提取中文字符串拼音首字母函数
  10. 在腾讯云服务器使用USBWebserver自建网站,网页打不开提示ERR_EMPTY_RESPONSE的解决办法