unity5 Orthographic模式相机视截体尺寸计算
一,通过编辑器中数值计算。
如图,相机为Orthographic模式,其camera size为5.57,是什么含义呢,经过测量,发现视图中视截体的高度是5.57x2。


那么视截体的宽度怎么决定呢?
做下面试验,前面屏幕尺寸选的是Web(600x900),所以 视截体宽度=视截体长度/900*600=7.426。经测量,这个值是对的。
假如我们将屏幕规格选为5:4,如图:

然后再回到Scene视图下,可以看到视截体的形状发生了变化:

不过可以看出视截体的高度并没有发生变化,仍然是5.57x2。按照前面的算法,视截体宽度=视截体高度/4*5=13.925。经测量,这个值是对的。
另外,如果调整Viewport Rect的W和H,也会影响视截体形状,但只要H不取0,视截体高度就永远等于2xsize值(5.57x2),所以有意义的只是W和H的比值。
于是可以总结:
在Orthographic模式下,视截体尺寸可如下计算:
视截体高度= camera.size
视截体宽度= 视截体高度*(screenWidth/screenHeight)*(camera.viewportRect.W/camera.viewportRect.H)
二,在脚本中计算。
public GameObject mainCamera;
void Start () {
float frustumHeight = mainCamera.GetComponent<Camera> ().orthographicSize*2;
float frustumWidth = frustumHeight*mainCamera.GetComponent<Camera> ().aspect;
Debug.Log (frustumWidth);
Debug.Log (frustumHeight);
}
在脚本中直接用mainCamera.GetComponent<Camera> ().aspect即可,里面已经包含了screen长宽比和viewportRect长宽比的影响。
unity5 Orthographic模式相机视截体尺寸计算的更多相关文章
- 3D游戏与计算机图形学中的数学方法-视截体
视截体用来表示一个空间的范围,位于这个空间范围内的三维场景的任何物体都可以被看到. 视截体由六个平面围成,其中的四个平面与场景的边界相对应,分别被称为左,右,底,顶视截面.另外两个平面称为近视截面和远 ...
- WorldWind源码剖析系列:视景体类Frustum
PluginSDK中的视景体类Frustum是三维计算机图形学中的概念,主要用来描述透视投影的过程.三维计算机图形学中关于三维物体的渲染,Direct3D和OpenGL都是先通过对现实世界中的场景先进 ...
- [World Wind学习]22.相机高度和瓦片等级计算
在这里我们看到判断Lod的级别主要有三个条件: * 1.相机视角范围,视角范围越大,所包含的tileSize就越大 * 2.相机与瓦片距离,距离越远,所包含的tileSize也就越大 * 3.相机视锥 ...
- 【Stage3D学习笔记续】山寨Starling(五):纹理计算和尺寸计算
尺寸计算: Starling中的尺寸是以像素为单位的,这一切都得力于我们使用的正交矩阵,还记得我们顶点数据中的位置数据么,如果我们提交的矩形的四个顶点为(0, 0)(0, 100)(100, 0)(1 ...
- 使用Chrome-headless模式下,截屏不全屏的问题
在headless模式下,是没有打开浏览器窗口的,那么driver.maximize_window(),找不到目标也打不开. 我们可以换一种方式,去在无头模式下,指定浏览器的窗口大小运行即可. __o ...
- unity获取相机视窗口大小
using UnityEngine; using System.Collections; public class CameraView : MonoBehaviour { private Camer ...
- sizeof(结构体)的计算
摘要: 经常被计算结构体的sizeof给搞晕,于是找了个时间,静下心来,搞定它. 一.为什么结构体计算这么乱? 答案是字节对齐,计算机存储系统中以Byte为单位存储数据,不同数据类型所占的空间不同,如 ...
- A4纸和一寸照在屏幕的尺寸计算
参考地址 https://www.cnblogs.com/lenther2002/p/5105126.html A4纸 A4纸的尺寸是210mm×297mm. 分辨率是72像素/英寸时,A4纸的尺寸的 ...
- 根据屏幕尺寸计算rem
!(function (doc, win) { var docEle = doc.documentElement, evt = "onorientationchange" in w ...
随机推荐
- [Backbone]1. Module, View classed
Welcome to the Anatomy of Backbone.js challenges! We're going to be building a simple Appointment ap ...
- MFC 小知识总结二
1 UpdateData 不能及时更新控件内容 原因: UpdateData是通过数据交换实现改变控件显示的.改变了之后必需要调用一次OnPaint才干实现刷新. 因此,若是在一个函数里重复多次调用有 ...
- poj 2391 (Floyd+最大流+二分)
题意:有n块草地,一些奶牛在草地上吃草,草地间有m条路,一些草地上有避雨点,每个避雨点能容纳的奶牛是有限的,给出通过每条路的时间,问最少需要多少时间能让所有奶牛进入一个避雨点. 两个避雨点间可以相互到 ...
- Hibernate框架简介(二)基本使用增、删、改、查
一.Hibernate框架简介 Hibernate是一个优秀的Java持久化层解决方案,是当今主流的对象-关系映射(ORM,ObjectRelationalMapping)工具 1.1.理解持久化 瞬 ...
- Android 四大组件学习之BroadcastReceiver三
本节学习广播的分类. 广播分为无序广播和有序广播 无序广播: 广播发送者的action与广播接收者的action都匹配的话,所以广播介绍者都能够收到这条广播,而且没有先后顺序,能够觉得是同一时候收到 ...
- tomcat启用压缩的方式
<Connector port="7070" protocol="HTTP/1.1"connectionTimeout="20000" ...
- spring boot 环境搭建
1.开发工具 https://spring.io/tools/sts/all 2.demo https://start.spring.io 3.下载maven https://maven.apache ...
- jdeveloper优化:
D:\jdevstudio10133\jdev\bin\jdev.conf末尾加上下面的AddVMOption -Dsun.java2d.noddraw=true AddVMOption -Dsun. ...
- hdu5246 超级赛亚ACMer
Problem Description 百小度是一个ACMer,也是一个超级赛亚人,每一个ACMer都有一个战斗力.包含百小度. 所谓超级赛亚人的定义,是说假设在对抗中刚好接近极限状态,那就会激发斗志 ...
- java Map Set遍历
Map是java中的接口,Map.Entry是Map的一个内部接口. Map提供了一些常用方法,如keySet().entrySet()等方法,keySet()方法返回值是Map中key值的集合:en ...