序言
摄像机在3D演示中扮演着重要的角色,Threejs提供了Camera对象及其子对象,可以非常方便的应用。
正交相机
使用正交投影来进行投影,无论物体距离相机距离远或者近,在最终渲染的图片中物体的大小都保持不变。渲染2D场景或者UI元素非常有用。
OrthographicCamera( left : Number, right : Number, top : Number, bottom : Number, near : Number, far : Number )
left: 摄像机视锥体左侧面。
right: 摄像机视锥体右侧面。
top: 摄像机视锥体上侧面。
bottom: 摄像机视锥体下侧面。
near: 摄像机视锥体近端面。
far: 摄像机视锥体远端面。
改变物体距离相机距离,物体大小始终如下
var camera = new THREE.OrthographicCamera( window.innerWidth / - 2, window.innerWidth / 2, window.innerHeight / 2, window.innerHeight / - 2, 0.1, 1000 );
camera.position.z = 1; //改变相机距离物体位置,物体保持不变
//camera.position.z = 999;
透视相机
这一摄像机使用透视投影来进行投影,用来模拟人眼所看到的景象,它是3D场景的渲染中使用最普遍的投影模式。
PerspectiveCamera( fov : Number, aspect : Number, near : Number, far : Number )
fov: 摄像机视锥体垂直视野角度
aspect: 摄像机视锥体长宽比
near: 摄像机视锥体近端面
far: 摄像机视锥体远端面
改变相机距离物理距离为466
改变相机距离物理距离为66
var camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
//改变相机距离物体位置,犹如人眼平常看到的景象,远小近大。
camera.position.z = 466;
//camera.position.z = 66;
立体相机
双透视摄像机常被用于创建3D立体影像或者视差效果。
StereoCamera(aspect : Float,eyeSep : Float,cameraL : PerspectiveCamera,cameraR : PerspectiveCamera)
aspect: 摄像机视锥体的长宽比,默认值是1。例如设置为场景的宽高比。
eyeSep: 模拟人的瞳孔间距,默认值是0.064
cameraL: 左摄像机
cameraR: 右摄像机
立方相机
创建6台相机,将它们的拍摄结果渲染。
//构造器
CubeCamera( near : Number, far : Number, cubeResolution : Number )
near: 近剪切面的距离
far: 远剪切面的距离
cubeResolution: 设置立方体边缘的长度
//创建6台相机
var cubeCamera = new THREE.CubeCamera( 1, 100000, 128 );
scene.add( cubeCamera );
//材质中设置环境贴图为相机拍摄
var chromeMaterial = new THREE.MeshLambertMaterial( { color: 0xffffff, envMap: cubeCamera.renderTarget.texture } );
var car = new Mesh( carGeometry, chromeMaterial );
scene.add( car );
// 更新相机
car.setVisible( false );
cubeCamera.position.copy( car.position );
cubeCamera.update( renderer, scene );
//渲染场景
car.setVisible( true );
renderer.render( scene, camera );