Three.js中的3d场景(scene)为无限大的,我们当然不可能去获取无限大的信息,在Three.js中封装了一个相机(Camera)的概念,它作为场景的观察者,获取有限的指定参数范围内的信息。
相机分为两种:
1. [endif]正投影相机(THREE.OrthographicCamera)
2. [endif]透视相机(THREE.PerspectiveCamera)
上图是正投影相机的取景范围,相机只会取立方体场景以内的信息,以外的不会抓取的,正投影的相机的特点是视线都是平行的,同样绝对大小的物体不会因为距离的远近而投影的大小不一,常用于工程建模。
上图是透视相机的取景范围,同样相机只会抓取立方体以内场景的信息,透视相机的特点的所有的视线都会相较于相机所在的位置,所以它会有远小近大的特点,类似真实世界的投影成像。
不管是正投影相机还是透视相近都继承于相机类,所以相机类中包含着一些两者公有的属性,想要获取一块需求的场景并通过一定的投影规则成像在浏览器上就必须有如下信息:
1. [endif]相机的位置(position),首先相机的位置决定观察者所处于的位置。
2. [endif]相机的视点(lookAt),相机的位置确定后,视点就决定了相机观察的方向,position与lookAt的连线的矢量是视线的正方面。
3. [endif]实例化相机时的参数,参数决定近平面远平面夹角之类的信息,至此就可以在场景Scene中通过相机的位置(position),视点(lookAt)和实例化参数确定一块空间,并获取信息。
4. [endif]相机的上方向(up),空间是没有上下左右,甚至东南西北的概念的,当我们获取了一块空间时,需要去定义空间的哪个方向为上才能成功的投影在浏览器上。