透视相机相机成像的面积、相机高度和视野角度之间的关系

Camera camera = Camera.main;

相机与成像面垂直

        float areaHeight = 40,//摄像机成像面积的高度distance = 50,//摄像机到成像面的高度fieldOfView = 60;//摄像机视野角度//已知:摄像机到成像面的高度、视野角度areaHeight = 2.0f * distance * Mathf.Tan(fieldOfView * 0.5f * Mathf.Deg2Rad);//已知:摄像机成像面积的高度、视野角度distance = areaHeight * 0.5f / (Mathf.Tan(fieldOfView * 0.5f * Mathf.Deg2Rad));//已知:摄像机高度、摄像机成像面积的高度fieldOfView = 2 * Mathf.Atan(areaHeight * 0.5f / distance) * Mathf.Rad2Deg;//aspect为相机宽高比     (width/height)float areaWidth = areaHeight * camera.aspect;//摄像机成像面积的宽度

当相机与成像面有角度

侧面视角:

        //相机旋转的角度float cameraAngle = 45;areaHeight = 2.0f * distance * Mathf.Tan(fieldOfView * 0.5f * Mathf.Deg2Rad);float angleInside = Mathf.Atan2(areaHeight / 2, distance) * Mathf.Rad2Deg;float angleOuntside = Mathf.Abs(cameraAngle - angleInside);//相机到地面的高度float cameraHeight = Mathf.Cos(cameraAngle * Mathf.Deg2Rad) * distance;//成像上半部分float distanceDown = Mathf.Sin(cameraAngle * Mathf.Deg2Rad) * distance - Mathf.Tan(angleOuntside * Mathf.Deg2Rad) * cameraHeight;//成像下半部分float distanceUp = Mathf.Tan((cameraAngle + angleInside) * Mathf.Deg2Rad) * cameraHeight - Mathf.Sin(cameraAngle * Mathf.Deg2Rad) * distance;

顶视图:

        float upOutLine = cameraHeight / Mathf.Cos((angleInside * 2 + angleOuntside) * Mathf.Deg2Rad);float upCameraHeight = upOutLine * Mathf.Cos(angleInside * Mathf.Deg2Rad);float upAreaHeight = 2.0f * upCameraHeight * Mathf.Tan(fieldOfView * 0.5f * Mathf.Deg2Rad);float upAreaWidth = upCameraHeight * camera.aspect;float downOutLine = cameraHeight / Mathf.Cos(angleOuntside * Mathf.Deg2Rad);float downCameraHeight = downOutLine * Mathf.Cos(angleInside * Mathf.Deg2Rad);float downAreaHeight = 2.0f * downCameraHeight * Mathf.Tan(fieldOfView * 0.5f * Mathf.Deg2Rad);float downAreaWidth = downCameraHeight * camera.aspect;

通过Field Of View值计算屏幕成像的宽高相关推荐

  1. Android kotlin工具类获取屏幕分辨率及宽高

    前言 获取屏幕相关工具DisplayUtil class DisplayUtil {companion object {/*** 获取屏幕宽度*/fun getScreenWidth(context: ...

  2. 获取屏幕浏览器的宽高

    JQuery: $(document).ready(function(){alert($(window).height()); //浏览器当前窗口可视区域高度alert($(document).hei ...

  3. 当View为GONE状态时获取View的宽高

    首先要明白一点就是一般情况下,我们在Activity里面的onCreate里面获取View宽高,可以采用: (1)View布局完成的监听 button.getViewTreeObserver().ad ...

  4. Android获取View宽高的常见方式

    背景 有时我们会有基于这样的需求,当Activity创建时,调用View.getWidth.View.getHeight().View.getMeasuredWidth() .View.getgetM ...

  5. JavaScript获取浏览器、元素、屏幕的宽高尺寸

    版权声明 转载请告知并注明来源作者 作者:唐金健 网络昵称:御焱 掘金知乎思否专栏:优雅的前端 前言 有时候在获取浏览器.元素.屏幕的尺寸,傻傻分不清.为了让自己清晰认识,能够快速确定自己需要哪个属性 ...

  6. html浏览器宽度,JavaScript获取浏览器、元素、屏幕的宽高尺寸

    版权声明 转载请告知并注明来源作者 作者:唐金健 网络昵称:御焱 掘金知乎思否专栏:优雅的前端 前言 有时候在获取浏览器.元素.屏幕的尺寸,傻傻分不清.为了让自己清晰认识,能够快速确定自己需要哪个属性 ...

  7. Android源码—为什么onResume方法中不可以获取View宽高

    前言 有一个经典的问题,我们在Activity的onCreate中可以获取View的宽高吗?onResume中呢? 对于这类八股问题,只要看过都能很容易得出答案:不能. 紧跟着追问一个,那为什么Vie ...

  8. 深度视场角(Depth Field of View)

    深度视场角(Depth Field of View) Realsense相机深度图的建立依赖双目立体成像原理,其有效视场是左.右成像器视场的重叠部分,如下图所示 顺带一提,这张图不能用于计算双目相机深 ...

  9. unity 求出物体所在相机的横截面 解决调整 field Of View后场景物体和UI不匹配

    接着上一篇来 Unity UI上的物体跟随场景物体位置变化而变化(人物血条/称号) 上一篇写了血条跟随角色变化  写完之后 我需要用相机的 field Of View 功能做一个远近景切换的功能 然后 ...

最新文章

  1. python和sqlserver应用_Windows和Linux下使用Python访问SqlServer的方法介绍
  2. AtCoder 2305 [AGC010D] Decrementing(博弈)
  3. linux磁盘管理的命令行,Linux磁盘管理命令介绍
  4. CROSS APPLY 和OUTER APPLY 的区别
  5. Ubuntu下编译SHTOOLS
  6. MD5 + salt 的加密算法
  7. 特斯拉,谁给你的勇气在中国玩双标
  8. 全国计算机二级c真题及答案,全国计算机二级c语言历年真题及答案
  9. ARINC429硬件层初探
  10. unity 360°全景图
  11. C++线性表(单链表)的应用算法(附源码)
  12. win10 网络重置后WIFI不见了
  13. 没有打不了的补丁切不了的面
  14. 自媒体怎么做视频搬运
  15. 爬动的蠕虫(无循环版)
  16. 数据类型(int、short、long、long long、unsigned、char、float、double)
  17. GridControl GridView 单元格内容换行
  18. directives 自定义指令
  19. POJ1837 DP
  20. gpedit.msc打开策略组为空

热门文章

  1. Educoder头歌单总线CPU设计(定长指令周期3级时序)(HUST)谭志虎 华中科技大学计算机组成原理实验计算机硬件系统设计
  2. 造成BGA焊接不良问题有哪些?
  3. 那些有趣又实用的开源人工智能项目 Top 10
  4. PTA - 数据库合集16
  5. C# GPIO通道调试(DMCI驱动)
  6. 2021-08-05 Vue+D3实现一个动态的流程图
  7. 远程连接服务器---SSH详解
  8. 网易2018校园招聘编程题真题集合3字符串碎片
  9. JS去除字符串中间多余空格
  10. 我的iMac苹果电脑的系统崩溃和恢复