一、安装
比如你采用的是Vue + threejs或React + threejs技术栈,这很简单,threejs就是一个js库,直接通过npm命令行安装就行。
npm安装特定版本three.js(注意使用哪个版本,查文档就查对应版本)
// 比如安装148版本
npm install three@0.148.0 --save
引入three.js
// 引入three.js
import * as THREE from 'three';
二、整体开发思路
three.js可以理解为在一个虚拟世界中观察一个模型,和在现实世界中是一样的。
在现实世界中观察一个物体,必须有这几步
1.第一步:有一个空间来存放这个物品
现实世界中,整个宇宙就是一个空间,我们都生活在这个空间中,在three.js中,我们也必须创造一个宇宙(空间)来让模型生存
所以第一步,创建一个虚拟空间
// 创建3D场景对象Scene
const scene = new THREE.Scene();
2.第二步:给想制作的物品画图纸
现实中,要制造一个物品,首先的有图纸,标注这个物品的大小尺寸,three.js也是一样,需要先定义物品的属性,比如长方体还是球体,大小尺寸,材质等等
//创建一个长方体几何对象Geometry,长宽高分别为100
const geometry = new THREE.BoxGeometry(100, 100, 100);
//创建一个材质对象Material
const material = new THREE.MeshBasicMaterial({
color: 0xff0000,//0xff0000设置材质颜色为红色
});
3.第三步:开始制作物品
现实中制作物品需要一大堆工具,three.js就简单了
// 两个参数分别为几何体geometry、材质material
const mesh = new THREE.Mesh(geometry, material); //网格模型对象Mesh
这样就把这个物品制作出来了,但是这个物品制作了,你得放在一个地方吧,比如地上,桌子上,对于three.js来说就是一个三维坐标
const mesh = new THREE.Mesh(geometry, material); //网格模型对象Mesh
//设置网格模型在三维空间中的位置坐标,默认是坐标原点
mesh.position.set(0,10,0);
4.第四步:将物品添加到创建的宇宙(空间)中
scene.add(mesh);
这样我们就创建好了一个完整的基础虚拟空间了
5.第五步:用“眼睛”看这个物品
现实中制作了一个物品,你得用眼睛去看吧,闭着眼睛你也看不到这个物品,在three.js中,所谓的眼睛就是相机,通过拍摄照片来对物品进行观察
// 实例化一个透视投影相机对象
const camera = new THREE.PerspectiveCamera();
现在相机以及创造出来了,但是还需要把这个相机放在一个位置,就比如一个人你看东西,你总得站在一个位置看吧
//相机在Three.js三维坐标系中的位置
// 根据需要设置相机位置具体值
camera.position.set(200, 200, 200);
现在相机的位置设置好了,还缺少一个角度,就比如你看东西,脑袋看向的角度不同,看到的东西就不同,这个物品在你左边,你脑袋偏向右边,那肯定是看不到的。
//相机观察目标指向Threejs 3D空间中某个位置
camera.lookAt(0, 0, 0); //坐标原点
//也可以这样
camera.lookAt(mesh.position);//指向mesh对应的位置,这样可以快速找到物品的角度
现在我们可以开始观察这个物品,在three.js中是通过相机拍照来观察物品的,现实中拍照得先确认照片大小,比如一寸,二寸照片,three.js也一样,需要设置照片的大小
// 定义相机输出画布的尺寸(单位:像素px)
const width = 800; //宽度
const height = 500; //高度
现在还需要最后一个设置,焦距,需要设置相机能拍摄的一个范围区间(在创造相机的时候,就应该设置)
// width和height用来设置Three.js输出的Canvas画布尺寸(像素px)
const width = 800; //宽度
const height = 500; //高度
// 30:视场角度, width / height:Canvas画布宽高比, 1:近裁截面, 3000:远裁截面
const camera = new THREE.PerspectiveCamera(30, width / height, 1, 3000);
PerspectiveCamera参数介绍
PerspectiveCamera( fov, aspect, near, far )
参数 | 含义 | 默认值 |
---|---|---|
fov | 相机视锥体竖直方向视野角度 | 50 |
aspect | 相机视锥体水平方向和竖直方向长度比,一般设置为Canvas画布宽高比width / height | 1 |
near | 相机视锥体近裁截面相对相机距离 | 0.1 |
far | 相机视锥体远裁截面相对相机距离,far-near构成了视锥体高度方向 | 2000 |
第六步:把照片打印出来
// 创建渲染器对象
const renderer = new THREE.WebGLRenderer();
// 定义threejs输出画布的尺寸(单位:像素px)
const width = 800; //宽度
const height = 500; //高度
renderer.setSize(width, height); //设置three.js渲染区域的尺寸(像素px)
renderer.render(scene, camera); //执行渲染操作
document.body.appendChild(renderer.domElement); //插入页面中