相机是一个图形引擎对 3D 投影的抽象概念,作用好比现实世界中的摄像机或眼睛。如果不加相机,画布将什么都画不出来。Galacean 的相机实现了自动视锥剔除,只渲染视锥体内的物体。
透视投影符合我们的近大远小模型,可以看一下透视模型示意图:
如上图所示,近裁剪平面(nearClipPlane),远裁剪平面(farClipPlane)和 视角(fieldOfView) 会形成一个视椎体 (View Frustum)。在视椎体内部的物体是会被投影到摄像机里的,也就是会渲染在画布上,而视椎体外的物体则会被裁剪。
正交投影就是可视区近处和远处看到的物体是等大小的。由正交投影模型产生的可视区称为盒状可视区,盒状可视区模型如下:
如上图所示,有 top、bottom、left 和 right,Galacean 对正交属性做了一些简化,更符合开发者的使用习惯,只有 orthographicSize。下面是针对各项属性和 orthographicSize 的关系
top = orthographicSize
bottom = -orthographicSize
right = orthographicSize * aspectRatio
left = -orthographicSize * aspectRatio
经过对透视投影和正交投影的比较,可发现他们的不同点:
通过以下示例能直观感受到正交相机与透视相机渲染效果的差异,简而言之,当需要展示 2D 效果时,就选择正交相机,当需要展示 3D 效果时,就选择透视相机。
Galacean 中的局部坐标与世界坐标遵循右手坐标系
,因此相机的 forward
方向为 -Z
轴,相机取景的方向也是 -Z
方向。
介绍了相机的基本概念,接下来让我们上手: