Unity Camera Orthographic Size 摄像机大小

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/wangjiangrong/article/details/96338240

如图,Unity的Camera的投影(Projection)设置有如下两种,正交(Orthographic)和透视(Perspective)。

正交模式下的话,摄像机是以一个固定的大小(Size),平行观察。被观察的物体不会因离摄像机的远近,而导致最终显示在屏幕的大小位置不同。物体旋转的话,在屏幕上的效果只会边长或变短,并不会有前大后小的效果(2D效果)

透视模式下的话,摄像机是以一个角度(Field of View),扩散观察。被观察的物体会因离摄像机的远近,而导致最终显示在屏幕的大小位置不同。物体旋转会有离摄像机近的部位显示的偏大,远的部位偏小的效果(3D效果)

这个时候,有一个问题是,在被观察的物体不动的情况下,当我用正交摄像机投影出一个画面的时候,此时将摄像机的投影模式改为投影模式,该如何设置参数,从而保证看到的画面不变。(实际情景是,FairyGUI的Stage Camera的正交摄像头,但是美术那边想要实现3D UI 的效果,所以想把Stage Camera改为透视摄像头,但是如何设置角度与位置使得UI可以完整的显示在屏幕上)

我们可以看出透视摄像机在不同距离的横切面是不同的屏幕大小,所以我们要找到其中一个距离的屏幕大小,正好和正交摄像机的屏幕大小一样即可。

所以我们先要来了解下所谓的摄像机屏幕大小的概念Orthographic Size

Orthographic Size

在正交模式下,我们设置Size的值,摄像机的大小会随之变动,那么这个值和摄像机的大小是什么关系呢?

简单的理解就是,size的值是正交摄像机高度的一半。当你拉伸屏幕窗口的时候,摄像机的高度不变,宽度改变。比如,我们Size设置的为7,表示屏幕的高度为14unit。

我们可以通过建立几个单位为1unit的cube进行验证,如图,我们用七个单位为1unit的cube,排成一排,正好是屏幕高度的一半。

知道Size的概念后,我们如果要使透视摄像机也一样显示Size=7的屏幕大小的话,只需要使得,当透视摄像机Field of View 为α时,在距离x的情况下,横切面的高度的一半为7即可,如图

根据三角函数我们可以得出 x = 7÷ tan(α÷2)

为了方便计算,我们可以把Field of View设为90度,则,tan45=1,所以我们只要将摄像机的z轴位置设置为-7,即可达到和正交摄像机size=7时,一样的屏幕效果(被观察的物体z轴为0)。

猜你喜欢

转载自blog.csdn.net/wangjiangrong/article/details/96338240
今日推荐