关于Unity中的摄像机
摄像机是挂载Camera组件的能把3D世界物体拍摄成2D画面显示到屏幕上面的节点,角度不一样,位置不一样,拍摄出来的东西就不一样。
Clear Flags:没有物体的时候,摄像机拍摄出的屏幕要绘制什么东西。sky box天空盒,soild color蓝色背景,dont clear不做任何处理(黑色)等选项。一般选择sky box天空盒。
Culling Mask:哪些物体是可以被摄像机拍出来的,哪些物体是不可以拍的,分类是用层来区别的,可以勾选哪些层不显示,然后把不想显示的物体放在那个层。
Projection:摄像机的投影类型,Perspective叫做透视投影,就是默认的那个椎体。这个模式下,近的物体在画面中比较大, 远的物体在画面中比较小。Orthographic叫做正交摄像机,是一个立方体投射,远近物体在画面中一样大,不适合3D场景,适合做界面2DUI
视椎:在near和far的范围内,加一个视角和一个有宽高比(可以在Game视图的菜单栏调节比例)的窗口,则在这个总范围内的物体才被摄像机绘制,之外的不会被绘制。视角越大,摄像机离宽口越近,显示的游戏画面越多,视角越小,摄像机离宽口越远。
显示的游戏画面越少,一般视角调为60度。
Clipping Planes:裁剪平面,Near表示拍摄到的最近的距离,Far表示拍摄到的最远的距离,以米为单位,超出或小于的相机不绘制。
Viewport Rect:视口显示的大小比例,就是摄像机拍摄到的画面在游戏Game视图的显示比例,一般是不去改的,除非想做两个显示画面的时候,像直播的右下角有人头像。
方法是再创建一个摄像机节点,如果不做调整,这时候新的摄像机会覆盖旧的摄像机,Game视图也会被新的摄像头拍摄的东西覆盖,这时候,调节其中一个摄像头的Viewport Rect,两个摄像机就可以同时把拍摄到的画面显示在Game视图。
Depth:摄像机绘制的顺序,Depth小的先绘制,大的后绘制。所以在有两个摄像机同时存在的情况下,Depth较大的那个摄像机所拍摄的画面会被Depth较小的摄像机所拍摄的画面覆盖。
Target Display:一台电脑可以接多台显示器,Display1到Display8分别表示1到8的显示器。选择哪一个Display就绘制到哪个对应的显示器上。
Occlusion Culling:遮挡剔除的开关,如果一个近的大物体挡住了远的许多小物体,那么远的小物体就没有必要绘制,可以提高游戏性能,但是正常情况下是先绘制远的物体,所以必须打开遮挡剔除,Unity才会帮我们做剔除。
复杂模型都是由很多子节点构成的,这些子节点之间有遮挡剔除,而且只有带Mesh的子节点才有。如果没有分很多子节点,要么模型绘制的时候要么全绘制,要么不绘制,非常不好。
注:遮挡剔除:绘制物体根据的是Zorder(Z轴顺序),先绘制远的物体,再绘制近的物体。坐标系是摄像机坐标系,这样近的物体就可以叠加在远的物体上。
使用正交投影做2DUI的步骤,是NGUI,UGUI的底层原理
1.首先创建一个正交摄像机,自己点挂载一个UI节点,移动到Game视图以外。
2.正交摄像机只显示UI层的物体,也就是UI节点所在的那个层,Depth2。
3.把透视摄像机背景设置为Dont clear
4.把透视摄像机的显示的层中,去除UI层,Depth1。
5.这时候就同时显示透视界面的画面和UI画面
透视投影的绘制流水线
1.把完全不在视椎内的物体排除掉,叫视椎裁剪。剔除掉不在摄像机中的物体。
2.把模型的世界坐标转化为摄像机坐标,摄像机坐标系是以摄像机为原点,x,y,z轴在点击摄像机节点的时候都会显示。
3.把以摄像机为原点的物体的摄像机3D坐标转为2D坐标。使用的是相似三角形,以Z/Z1为比例
正交投影的绘制流水线
1.没有相似三角形变化,直接多长就多长,所以远的近的一样长。
关于Unity中的摄像机的更多相关文章
- unity中让摄像机移动到鼠标点击的位置和鼠标控制平移视角
private Vector3 targetVector3; private float movespeed=0.5f; private bool IsOver = true; private Gam ...
- 关于Unity中Camera的Aspect
一直以来对Camera的Aspect和Game窗口的Aspect都是一知半解,某天从一本书中看到了对Camera的API讲解,但是总觉得对Aspect讲解的有问题.于是就认真的思考起了这个问题,还发现 ...
- Unity小知识---第三人称中设置摄像机的简单跟随
第三人称中设置摄像机的简单跟随 private Transform player; private Vector3 offect; private float smooothing = 3f; //插 ...
- 解读Unity中的CG编写Shader系列八(镜面反射)
转自http://www.itnose.net/detail/6117378.html 讨论完漫反射之后,接下来肯定就是镜面反射了 在开始镜面反射shader的coding之前,要扩充一下前面提到的知 ...
- WP8:在Unity中使用OpenXLive
Unity 4.2正式版开始添加了对Windows 8.Windows Phone 8等其他平台的支持,而且开发者可以免费使用Unity引擎来开发游戏了.而作为Windows Phone和Window ...
- 移植UE4的模型操作到Unity中
最近在Unity上要写一个东东,功能差不多就是在Unity编辑器上的旋转,移动这些,在手机上也能比较容易操作最好,原来用Axiom3D写过一个类似的,有许多位置并不好用,刚好在研究UE4的源码,在模型 ...
- Unity中Mesh分解与边缘高亮加上深度检测
一个比较简单的需求,不过遇到些坑,记录下. 房间有多个模型,每个模型可能多个SubMesh,点击后,需要能具体到是那个SubMesh,并且在这个SubMesh上显示边缘高光,以及能个性这单个SubMe ...
- Unity中简单使用Opengl
简介 由于项目特殊需求,需要在unity中使用一些OpenGL的东西来绘制图形(PS:其实就是有一个拖尾算法只有OpenGL版本~~~懒得改了,直接在unity中使用OpenGL算了).所以琢磨咯下如 ...
- Unity教程之再谈Unity中的优化技术
这是从 Unity教程之再谈Unity中的优化技术 这篇文章里提取出来的一部分,这篇文章让我学到了挺多可能我应该知道却还没知道的知识,写的挺好的 优化几何体 这一步主要是为了针对性能瓶颈中的”顶点 ...
随机推荐
- IIS 之 功能详解
IIS (Internet Information Services)信息服务管理器,本文以Windows10环境下的IIS为例,主要包含:FTP 服务器.Web 管理工具.万维网服务三大部分,如下表 ...
- object sender, LinkLabelLinkClickedEventArgs e 参数解释
开始是一个LinkLabel 控件,LinkLabel 绑定了Clicke事件 LinkLabel Delete = new LinkLabel(); Delete.Text = "删除&q ...
- 微信小程序 - 五星评分(含半分)
转载自:http://blog.csdn.net/column/details/13721.html 演示: 下载:小程序-星级评论.zip
- 解压zip,解决中文乱码
Project p = new Project(); Expand e = new Expand(); e.setProject(p); e.setSrc(f ...
- Python 遍历set
遍历set 由于 set 也是一个集合,所以,遍历 set 和遍历 list 类似,都可以通过 for 循环实现. 直接使用 for 循环可以遍历 set 的元素: weekdays = set([' ...
- Using AutoFac
第一次整理了下关于autofac的一些具体的用法 1. 安装 Autofac: Install-Package Autofac -Version 4.8.1 2. 创建两个类库项目,IService ...
- 摘:C++日期时间与字符串间的转换
VC6中 CString sTime = _T("2007-10-26 13:20:30"); char *charTime = (LPSTR)(LPCTSTR)sTime; CS ...
- 解决C# WINFORM程序只允许运行一个实例的几种方法详解
要实现程序的互斥,通常有下面几种方式,下面用 C# 语言来实现: 方法一: 使用线程互斥变量. 通过定义互斥变量来判断是否已运行实例. 把program.cs文件里的Main()函数改为如下代码: u ...
- hibernate 中多对多关系对象集合的保存
多对多关系映射和一对多关系映射开发步骤差不多, 例子如下:员工和项目之间的关系,一个员工可以参与多个项目:一个项目可以有多个开发人员参与.因此是多对多的关系. 1 分析数据表 1.1)员工表 CREA ...
- ubuntu下安装自动补全YouCompleteMe
一.安装预备软件.#vim要带python2.7的支持,curl是下载插件必须用到的软件,还有git apt install vim-nox-py2 curl git #安装python头文件 apt ...