摄像机是挂载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中的摄像机的更多相关文章

  1. unity中让摄像机移动到鼠标点击的位置和鼠标控制平移视角

    private Vector3 targetVector3; private float movespeed=0.5f; private bool IsOver = true; private Gam ...

  2. 关于Unity中Camera的Aspect

    一直以来对Camera的Aspect和Game窗口的Aspect都是一知半解,某天从一本书中看到了对Camera的API讲解,但是总觉得对Aspect讲解的有问题.于是就认真的思考起了这个问题,还发现 ...

  3. Unity小知识---第三人称中设置摄像机的简单跟随

    第三人称中设置摄像机的简单跟随 private Transform player; private Vector3 offect; private float smooothing = 3f; //插 ...

  4. 解读Unity中的CG编写Shader系列八(镜面反射)

    转自http://www.itnose.net/detail/6117378.html 讨论完漫反射之后,接下来肯定就是镜面反射了 在开始镜面反射shader的coding之前,要扩充一下前面提到的知 ...

  5. WP8:在Unity中使用OpenXLive

    Unity 4.2正式版开始添加了对Windows 8.Windows Phone 8等其他平台的支持,而且开发者可以免费使用Unity引擎来开发游戏了.而作为Windows Phone和Window ...

  6. 移植UE4的模型操作到Unity中

    最近在Unity上要写一个东东,功能差不多就是在Unity编辑器上的旋转,移动这些,在手机上也能比较容易操作最好,原来用Axiom3D写过一个类似的,有许多位置并不好用,刚好在研究UE4的源码,在模型 ...

  7. Unity中Mesh分解与边缘高亮加上深度检测

    一个比较简单的需求,不过遇到些坑,记录下. 房间有多个模型,每个模型可能多个SubMesh,点击后,需要能具体到是那个SubMesh,并且在这个SubMesh上显示边缘高光,以及能个性这单个SubMe ...

  8. Unity中简单使用Opengl

    简介 由于项目特殊需求,需要在unity中使用一些OpenGL的东西来绘制图形(PS:其实就是有一个拖尾算法只有OpenGL版本~~~懒得改了,直接在unity中使用OpenGL算了).所以琢磨咯下如 ...

  9. Unity教程之再谈Unity中的优化技术

    这是从 Unity教程之再谈Unity中的优化技术 这篇文章里提取出来的一部分,这篇文章让我学到了挺多可能我应该知道却还没知道的知识,写的挺好的 优化几何体   这一步主要是为了针对性能瓶颈中的”顶点 ...

随机推荐

  1. java Socket通信使用BufferedReader和BufferedWriter的注意事项

    注意事项:readLine()要求有换行标识,write()要输出换行标识,要调用flush()刷新缓冲区. 以下是取自java socket通信中的一小段代码. BufferedReader rea ...

  2. 显示游戏FPS帧率的几种计算方式

    FPSDisplay.cs using UnityEngine; using System.Collections; public class FPSDisplay : MonoBehaviour { ...

  3. Java设计模式(二)-单例模式

    单例模式建议保证某个对象仅仅仅仅有一个实例,当仅仅有一个对象来协调整个系统的操作时,在计算机系统中.线程池.缓存.日志对象.对话框.打印机.显卡的驱动程序对象常被设计成单例.总之,选择单例模式就是为了 ...

  4. ORA-16014 与 ORA-00312

    场景: SQL> alter system archive log current; alter system archive log current * 第 1 行出现错误: ORA-1601 ...

  5. 关于SO_REUSEADDR的使用说明~

    参考WINDOWS   网络编程技术         1.   可以对一个端口进行多次绑定,一般这个是不支持使用的:     2.   对于监听套接字,比较特殊.如果你定义了SO_REUSEADDR, ...

  6. NSArray利用Cocoa框架进行汉字排序

    NSArray利用Cocoa框架进行汉字排序 在NSString有一个函数localizedCompare:,它的功能是通过自身与给定字符串的比較,返回一个本地化的比較结果.也就是说这个函数是支持汉字 ...

  7. 一次安装win10 ubuntu16.0经过记录

    步骤摘要 三个U盘: 1.制作WIN8 PE启动盘,使用的软件为“U深度装机版”,可自行百度下载 2.制作WIN10系统安装盘,使用UltraISO,这里使用的win10镜像为: 链接: http:/ ...

  8. 深度介绍Linux内核是如何工作的

    本文发表于Linux Format magazine杂志,作者从技术深度上解释了Linux Kernel是如何工作的.相信对Linux开发者来说有不小的帮助. 牛津字典中对"kernel&q ...

  9. operator new 和 operator delete 实现一个简单内存泄漏跟踪器

    先来说下实现思路:可以实现一个Trace类,调用 operator new 的时候就将指向分配内存的指针.当前文件.当前行等信息添加进Trace 成员map容器内,在调用operator delete ...

  10. ffmpeg command

    1. 列出当前系统的设备列表 ffmpeg -list_devices true -f dshow -i dummy 2. 列出设备Integrated Camera的信息 ffmpeg -list_ ...