threejs
环境配置
以下内容均需安装在项目根目录下,在项目根目录cmd执行命令。
yarn init -y:初始化文件夹,创建package.json文件yarn add -D vite:安装构建工具viteyarn add -D three:安装three.js"scripts": { "dev":"vite"}:在package.json文件里添加键值对,设置开发环境yarn dev:构建环境,返回的网址后接 根目录起相对路径即可打开网页。
Three.js三要素
- Scene:容器,用于存放所有显示在三维空间中的对象,如几何体、纹理、材质。
- Camera:Three.js提供多种相机模式,包括正交相机、透视相机、立方相机和立体相机,大多数时候(包括后续笔记)都使用PerspectiveCamera(透视相机)。
- Renderer(渲染器):常用WebGLRenderer。
基本语法
初始化场景
创建物体
物体运动
更改场景背景
- 更改背景颜色:
scene.background=new THREE.Color()
参数可传0x开头的十六进制颜色、rgb、hsl等,除了十六进制以外都必须传字符串形式. - 更改背景图片:异步加载
PerspectiveCamera(透视相机)
构造函数
PerspectiveCamera()共有以下四个参数,均为Number类型:
- fov:视锥角
- aspect:视野范围的长宽比
- near和far:进行透视投影的计算时的近平面与远平面,在这个范围外的部分会被裁切
成员
整体思路和unity类似。
position:位置坐标,有x、y和z三个属性。
额外的,可以使用obj.position.set()来设置摄像机的整体坐标,三个参数为坐标的x、y和z值。lookAt:面朝向量,即摄像机朝向的方向向量。三个参数为看向目标的坐标的x、y和z值。
Renderer(渲染器)
构造函数
WebGLRenderer()的参数均为可选参数,列表如下:
canvas:指定渲染器的目标位置,值为Element类型。如果不指定,则会自动创建一个默认300px*150px的Canvas。antialias:抗锯齿选项,值为布尔。如果不指定,默认为false。
其它暂略,详见WebGLRenderer – three.js docs
成员
renderer.domElement:返回当前渲染器渲染的目标元素 。renderer.setSize(w,h):设置渲染区域的宽高。
轨道控制器(OrbitControls)
THREE.js提供的附加组件,通过获取鼠标的输入,使相机能够围绕目标进行轨道运动。
可应用的运动类型包括旋转、缩放、以及拖拽。
使用时,需导入该模块。
构造函数
构造函数接收两个参数。
carmera:被控制的相机,类型为Element。这个参数是必须的。
-
domElement:用于事件监听的元素,类型是Element。这个参数是可选的。该元素决定了事件监听依附的元素。通常情况下,该参数被设置为对应的
renderer.domElement,它会将事件监听绑定到renderer所在的canvas上。不设置时,将会默认绑定到
Document元素上。
事件
OrbitContorls提供以下事件用于事件回调。
-
change:当摄像机被该组件改变时触发。通常会把渲染语句
renderer.render(scene,camera)写在事件内,以在每次更新相机时重新渲染。
start:初始化交互时触发。
end:交互结束时触发 。
常用属性
enablePan:布尔值,是否允许右键拖拽。
enableZoom:布尔值,是否允许缩放,默认值为True。
enableRotate:布尔值,是否允许旋转,默认为True。
minZoom/maxZoom:Number,设置缩放范围,值为相对原始大小的倍率。
minPolarAngle/maxPolarAngle:Number,设置上下旋转范围(绕右手坐标系x轴),值为弧度制。
minAzimuthAngle/maxAzimuthAngle:Number,设置左右旋转范围(绕右手坐标系y轴),值为弧度制。
-
enableDamping:布尔值,是否启用摄像机的惯性。启用时,必须在
animate调用contorl.update()。
-
damplingFactor:Number,摄像机的惯性大小。启用时,必须在
animate调用contorl.update()。
常用方法
OrbitContotls提供了以下方法:
-
update():该方法没有参数,提供了控制器变换的位置同步和后处理,后处理包括惯性与阻尼计算、自动旋转、角度与距离约束、change事件分发等。通常情况下,都需要将
contorl.update()写在animate中。
坐标网格辅助线(GridHelper)
THREE.js提供的一种可视化工具,用于调试时进行视觉参考。
构造函数
共有以下四个参数:
size:Number类型,控制每个坐标格的尺寸,默认为10。
divisions:坐标格细分次数,默认为10.
colorCenterLine:中线颜色,值为Color类型,十六进制值或CSS颜色名。
colorGrid:坐标格网格线颜色,值同上。
几何体
创建不同的默认几何体将使用不同的构造函数,函数列表详见BoxGeometry – three.js docs,此处仅作简略说明。
构造函数常用参数
heigthSegments/depthSegments:横向/纵向分段数,控制生成模型的平滑程度,近似blender的细分。
BufferGeometry
所有默认几何体都基于BufferGeometry创建,因此,通过BufferGeometry能够创建任何形状的物体。
构造函数
创建一个BufferGeometry对象并将属性初始化为默认值。该构造函数没有参数。
属性
geometry.attributes:存储该几何体的几何数据,包括但不限于顶点坐标等,通过set和get添加与访问。boundingBox:外边界矩形,默认为null,可以通过.computeBoundingBox()方法计算。boundingSphere:外边界球体,默认为null,可以通过.computeBoundingSphere()方法计算。
常用方法
-
geometry.setAttribute(name:String,attribute:BufferAttribute):为当前几何体设置一个attribute。arrtibute以哈希表的方式存储,其中键为该方法的第一个参数,值为该方法的第二个参数。
BufferAttribute
一种用于存储BufferGeometry的数据的数据结构。
构造函数
构造函数共三个参数,其中normalized是可选参数。
array:将构造的图形的顶点列表。该列表的元素数量应该是顶点数量*itemSize。
itemSize:每个数据在array中由几个元素构成。例如,当存储三维空间中的顶点坐标时,itemSize的值应该是3。
-
normalized:是否进行归一化处理,默认值为false。此处的归一化是指GPU将接收数据映射到
[-1,1]范围内(无符号类型时是[0,1]),不涉及光栅化阶段的投影变换和视图变换。通常情况下,不需要设置为true。
Material(材质)
material提供颜色、纹理和光照相应等属性 的管理。