跳至主要內容
相机

我们常用的相机正交相机(OrthographicCamera)和透视相机(PerspectiveCamera)两种相机,用于来捕获场景内显示的物体模型。它们有一些通用的属性和方法:

由于相机都是继承至THREE.Object3D对象的,所以像设置位置的position属性、rotation旋转和scale缩放属性,可以直接对相机对象设置。我们甚至还可以使用add()方法,给相机对象添加子类,移动相机它的子类也会跟随着一块移动,我们可以使用这个特性制作一些比如 HUD 类型的显示界面。


Emilia Zhen大约 3 分钟canvasthree.js
光照

AmbientLight 环境全局光

环境光会照亮场景中所有的物体,在计算物体的颜色的时候,都会叠加上环境光的颜色。

var light = new THREE.AmbientLight(0x404040) // 创建一个灰色的环境光
scene.add(light)

Emilia Zhen大约 5 分钟canvasthree.js
材质

材质可以看成是材料和质感的结合。在渲染程式中,它是表面各可视属性的结合,这些可视属性是指表面的色彩、纹理、光滑度、透明度、反射率、折射率、发光度等。Three.js给我们封装好了大部分的材质效果。

MeshBasicMaterial

这种材质是一种简单的材质,不会受到光的影响,直接看到的效果就是整个物体的颜色都是一样,没有立体的感觉。
set修改color,也可以赋值一个新的THREE.Color对象

var material = new THREE.MeshBasicMaterial({ color: 0x00ffff }) //设置初始的颜色为浅蓝色
material.color.set(0xff00ff)
material.color = new THREE.Color(0xff00ff) //将颜色修改为紫色

Emilia Zhen大约 4 分钟canvasthree.js
geometry几何体

一个模型是由几何体Geometry和材质material组成。Three.js内置了很多的几何体种类,如:立方体、三棱锥、球、八面体、十二面体、二十面体等等

当前Three.js内置了这两种几何体类型GeometryBufferGeometry,这两个几何体类型都是用于存储模型的顶点位置、面的索引、法向量、颜色、uv纹理以及一些自定义的属性

  1. Geometry

Emilia Zhen大约 3 分钟canvasthree.js
scene场景

场景是我们每个Three.js项目里面放置内容的容器,我们也可以拥有多个场景进行切换展示,你可以在场景内放置你的模型,灯光和照相机。还可以通过调整场景的位置,让场景内的所有内容都一起跟着调整位置

THREE.Object3D

为了方便操作,Three.js将每个能够直接添加到场景内的对象都继承至一个基类-THREE.Object3D,以后我们将继承至这个基类的对象称为3d对象,判断一个对象是否是继承至THREE.Object3D,我们可以这么判断:obj instanceof THREE.Object3D


Emilia Zhen大约 2 分钟canvasthree.js
three.js

特点

Three.js作为WebGL框架中的佼佼者,由于它的易用性和扩展性,使得它能够满足大部分的开发需求。
Three.js掩盖了3D渲染的细节:Three.jsWebGL原生API的细节抽象化,将3D场景拆解为网格、材质和光源(即它内置了图形编程常用的一些对象种类)。

  • 面向对象:开发者可以使用上层的JavaScript对象,而不是仅仅调用JavaScript函数。
  • 功能非常丰富:Three.js除了封装了WebGL原始API之外,Three.js还包含了许多实用的内置对象,可以方便地应用于游戏开发、动画制作、幻灯片制作、髙分辨率模型和一些特殊的视觉效果制作。
  • 速度很快:Three.js采用了3D图形最佳实践来保证在不失可用性的前提下,保持极高的性能。
  • 支持交互:WebGL本身并不提供拾取(picking)功能(即是否知道鼠标正处于某个物体上)。而Three.js则固化了拾取支持,这就使得你可以轻松为你的应用添加交互功能。
  • 包含数学库:Three.js拥有一个强大易用的数学库,你可以在其中进行矩阵、投影和矢量运算。
  • 内置文件格式支持:你可以使用流行的 3D 建模软件导出文本格式的文件,然后使用Three.js加载;也可以使用Three.js自己的JSON格式或二进制格式。
  • 扩展性很强:为Three.js添加新的特性或进行自定义优化是很容易的事情。如果你需要某个特殊的数据结构,那么只需要封装到Three.js即可。

Emilia Zhen大约 7 分钟canvasthree.js