相机API

照相机就是这样一个抽象,它定义了三维空间到二维屏幕的投影方式,用“照相机”这样一个类比,可以使我们直观地理解这一投影方式。
而针对投影方式的不同,照相机又分为正交投影照相机与透视投影照相机。我们需要为自己的程序选择合适的照相机。

正交投影照相机

图片描述

THREE.OrthographicCamera(left, right, top, bottom, near, far) 
  1. left: 相机视椎体(Camera frustum)左面。
  2. right: 相机视椎体(Camera frustum)右面。
  3. top: 相机视椎体(Camera frustum)上面。
  4. bottom:相机视椎体(Camera frustum)下面。
  5. near: 相机视椎体(Camera frustum)前面(靠近相机的这一面)。
  6. far: 相机视椎体(Camera frustum)后面(远离相机的这一面)。

设置照相机

var camera = new THREE.OrthographicCamera(-2, 2, 1.5, -1.5, 1, 10);
camera.position.set(0, 0, 5);
scene.add(camera); 

相机位置

camera.position.set(2, -2, 5);

相机朝向

镜头默认的方向是朝着z轴的负方向

camera.lookAt(new THREE.Vector3(0,0,0));

lookAt函数接受的是一个THREE.Vector3的实例,因此千万别写成camera.lookAt(0, 0, 0),否则非但不能得到理想的效果,而且不会报错,使你很难找到问题所在。

相机快门方向

相机快门默认向上,以相机自身为中心画坐标轴(本地坐标轴)默认为(0,0,0);

camera.up.z= 1;
camera.up.x =1;
camera.up.y =-1;

更新相机投影矩阵

camera.fov = fov;
camera.updateProjectionMatrix();

更新相机投影矩阵,必须在参数发生变化后调用。

透视投影照相机

图片描述

THREE.PerspectiveCamera(fov, aspect, near, far) 
  1. 视角fov:这个最难理解,我的理解是,眼睛睁开的角度,即,视角的大小,如果设置为0,相当你闭上眼睛了,所以什么也看不到,如果为180,那么可以认为你的视界很广阔,但是在180度的时候,往往物体很小,因为他在你的整个可视区域中的比例变小了。
  2. 近平面near:这个呢,表示你近处的裁面的距离。补充一下,也可以认为是眼睛距离近处的距离,假设为10米远,请不要设置为负值,Three.js就傻了,不知道怎么算了,
  3. 远平面far:这个呢,表示你远处的裁面,

4、纵横比aspect:实际窗口的纵横比,即宽度除以高度。这个值越大,说明你宽度越大,那么你可能看的是宽银幕电影了,如果这个值小于1,则为竖屏。

设置照相机

var camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 1, 1000);

梵鹿
246 声望37 粉丝