通过Field Of View值计算屏幕成像的宽高
透视相机相机成像的面积、相机高度和视野角度之间的关系
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值计算屏幕成像的宽高相关推荐
- Android kotlin工具类获取屏幕分辨率及宽高
前言 获取屏幕相关工具DisplayUtil class DisplayUtil {companion object {/*** 获取屏幕宽度*/fun getScreenWidth(context: ...
- 获取屏幕浏览器的宽高
JQuery: $(document).ready(function(){alert($(window).height()); //浏览器当前窗口可视区域高度alert($(document).hei ...
- 当View为GONE状态时获取View的宽高
首先要明白一点就是一般情况下,我们在Activity里面的onCreate里面获取View宽高,可以采用: (1)View布局完成的监听 button.getViewTreeObserver().ad ...
- Android获取View宽高的常见方式
背景 有时我们会有基于这样的需求,当Activity创建时,调用View.getWidth.View.getHeight().View.getMeasuredWidth() .View.getgetM ...
- JavaScript获取浏览器、元素、屏幕的宽高尺寸
版权声明 转载请告知并注明来源作者 作者:唐金健 网络昵称:御焱 掘金知乎思否专栏:优雅的前端 前言 有时候在获取浏览器.元素.屏幕的尺寸,傻傻分不清.为了让自己清晰认识,能够快速确定自己需要哪个属性 ...
- html浏览器宽度,JavaScript获取浏览器、元素、屏幕的宽高尺寸
版权声明 转载请告知并注明来源作者 作者:唐金健 网络昵称:御焱 掘金知乎思否专栏:优雅的前端 前言 有时候在获取浏览器.元素.屏幕的尺寸,傻傻分不清.为了让自己清晰认识,能够快速确定自己需要哪个属性 ...
- Android源码—为什么onResume方法中不可以获取View宽高
前言 有一个经典的问题,我们在Activity的onCreate中可以获取View的宽高吗?onResume中呢? 对于这类八股问题,只要看过都能很容易得出答案:不能. 紧跟着追问一个,那为什么Vie ...
- 深度视场角(Depth Field of View)
深度视场角(Depth Field of View) Realsense相机深度图的建立依赖双目立体成像原理,其有效视场是左.右成像器视场的重叠部分,如下图所示 顺带一提,这张图不能用于计算双目相机深 ...
- unity 求出物体所在相机的横截面 解决调整 field Of View后场景物体和UI不匹配
接着上一篇来 Unity UI上的物体跟随场景物体位置变化而变化(人物血条/称号) 上一篇写了血条跟随角色变化 写完之后 我需要用相机的 field Of View 功能做一个远近景切换的功能 然后 ...
最新文章
- python和sqlserver应用_Windows和Linux下使用Python访问SqlServer的方法介绍
- AtCoder 2305 [AGC010D] Decrementing(博弈)
- linux磁盘管理的命令行,Linux磁盘管理命令介绍
- CROSS APPLY 和OUTER APPLY 的区别
- Ubuntu下编译SHTOOLS
- MD5 + salt 的加密算法
- 特斯拉,谁给你的勇气在中国玩双标
- 全国计算机二级c真题及答案,全国计算机二级c语言历年真题及答案
- ARINC429硬件层初探
- unity 360°全景图
- C++线性表(单链表)的应用算法(附源码)
- win10 网络重置后WIFI不见了
- 没有打不了的补丁切不了的面
- 自媒体怎么做视频搬运
- 爬动的蠕虫(无循环版)
- 数据类型(int、short、long、long long、unsigned、char、float、double)
- GridControl GridView 单元格内容换行
- directives 自定义指令
- POJ1837 DP
- gpedit.msc打开策略组为空