# 第一个 3D 场景

在 three.js 中有这么几个基本基本概念

  1. 场景(Scene) 是物体、光源等元素的容器,可以配合 chrome 插件使用,抛出 window.scene 即可实时调整 obj 的信息和材质信息。
  2. 相机(Camera) 场景中的相机,代替人眼去观察,场景中只能添加一个,一般常用的是透视相机(PerspectiveCamera)
  3. 网格(Mesh) 包括二维物体(点、线、面)、三维物体,模型等等
  4. 光照(Light) 场景中的光照,如果不添加光照场景将会是一片漆黑,包括全局光、平行光、点光源等
  5. 渲染器(Renderer):场景的渲染方式,如 webGL\canvas2D\Css3D。
  6. 控制器(Control): 可通过键盘、鼠标控制相机的移动

# 场景 Scene

// 创建一个场景容器
var scene = new THREE.Scene();

# 几何体 Geometry

//创建一个立方体几何对象Geometry
var geometry = new THREE.BoxGeometry(100, 100, 100);
//创建一个球体几何对象
var geometry = new THREE.SphereGeometry(60, 40, 40);

# 材质 Material

var red = new THREE.MeshLambertMaterial({ color: 0xff0000 });

通过构造函数 THREE.MeshLambertMaterial()创建了一个可以用于立方体的材质对象
构造函数的参数是一个对象,对象包含了颜色、透明度等属性

# 网格模型 Mesh

// 网格模型对象Mesh
var redBall = new THREE.Mesh(sphere, red);
var blueCube = new THREE.Mesh(box, blue);

有了几何和材质信息,我们就可以创造一个物体出来了,在 three.js 使用网格模型来描述一个物体

# 坐标系 Axis

// 辅助坐标系  参数250表示坐标系大小,可以根据场景大小去设置
var axes = new THREE.AxisHelper(200);
scene.add(axes);

通过构造函数 THREE.AxisHelper()创建了一个坐标系,three.js 中的坐标系为右手坐标系

TIP

threejs 三维坐标系老版本名称是 AxisHelper,新版本名称 AxesHelper

# 光源 Light

var point = new THREE.PointLight(0xffffff);
point.position.set(400, 200, 300);

通过构造函数 THREE.PointLight()创建了一个点光源对象,参数 0xffffff 定义的是光照强度

# 相机 Camera

var camera = new THREE.OrthographicCamera(-s * k, s * k, s, -s, 1, 1000);
camera.position.set(200, 300, 200); // 设置相机位置
camera.lookAt(scene.position); // 设置相机方向(指向场景对象)

通过构造函数 THREE.OrthographicCamera()创建了一个正射投影相机对象

# 渲染器 WebGLRender

// 创建渲染器对象
var renderer = new THREE.WebGLRenderer();
renderer.setSize(width, height); //设置渲染区域尺寸
renderer.setClearColor(0xb9d3ff, 1); //设置背景颜色

# 补充知识

透视相机(透视投影) 透视相机模拟的效果与人眼看到的景象最接近,在 3D 场景中也使用得最普遍,这种相机最大的特点就是近大远小,同样大小的物体离相机近的在画面上显得大,离相机远的物体在画面上显得小。

PerspectiveCamera( fov : Number, aspect : Number, near : Number, far : Number )
  • fov — 摄像机视锥体垂直视野角度
  • aspect — 摄像机视锥体长宽比
  • near — 摄像机视锥体近端面
  • far — 摄像机视锥体远端面

正交相机(正交投影) 使用正交相机时无论物体距离相机远或者近,在最终渲染的图片中物体的大小都保持不变。

OrthographicCamera( left : Number, right : Number, top : Number, bottom : Number, near : Number, far : Number )
  • left — 摄像机视锥体左侧面
  • right — 摄像机视锥体右侧面
  • top — 摄像机视锥体上侧面
  • bottom — 摄像机视锥体下侧面
  • near — 摄像机视锥体近端面
  • far — 摄像机视锥体远端面

1