几何体
边缘几何体
可以作为一个辅助对象来查看几何体的边缘。
EdgesGeometry 构造函数用于创建边缘几何体,接受一个几何体对象作为参数。
LineBasicMaterial 构造函数用于创建线条材质,接受一个对象作为参数。
LineSegments 构造函数用于创建线条,接受两个参数:
-
geometry: 线条几何体。
-
material: 线条材质。
traverse 方法用于遍历场景中的所有对象,接受一个回调函数作为参数。
线框几何体
WireframeGeometry 构造函数用于创建线框几何体,接受一个几何体对象作为参数。
模型解压
在 Three.js 中,模型解压是指将压缩的模型文件解压缩为 Three.js 可以直接使用的模型对象的过程。通常,模型文件在压缩后可以减小文件大小,加快加载速度,但是解压缩过程需要消耗一定的计算资源。
正如上面加载的 building.gltf
模型是压缩过的,如果正常加载会报错,所以需要解压。
DRACOLoader
DRACOLoader 是 Three.js 提供的一个用于加载和解压缩 Draco 压缩格式的模型文件的加载器。Draco 是一个开源的 3D 图形压缩库,可以有效地减少 3D 模型的文件大小,加快加载速度,并保持较高的图形质量。
使用步骤:
- 引入 DRACOLoader
- 创建 DRACOLoader 实例
- 设置 DRACOLoader 的解析器路径
注意: 解析器路径是相对于当前 HTML 文件的路径,所以需要把 three/examples/jsm/libs/draco
文件夹拷贝到项目public
中。
- 设置加载器 draco 解码器
包围盒
包围盒(Bounding Box)是一个用于描述物体体积的几何体,用于计算物体的位置、大小和碰撞等属性。在三维图形学中,包围盒通常用于加速物体的碰撞检测和渲染。
Box3
getObjectByName 方法用于获取指定名称的对象,返回值为对象本身。
.computeBoundingBox() 方法用于计算几何体的包围盒,返回值为包围盒对象。
.boundingBox 属性用于获取几何体的包围盒,返回值为包围盒对象。
Box3Helper 构造函数用于创建包围盒辅助线,接受两个参数:
-
box: 要显示的包围盒对象。
-
color: 辅助线的颜色。
因为生成的包围盒是一个立方体,所以可以直接通过 min 和 max 属性获取立方体的最小和最大坐标。可快速生成包围盒。
Sphere
.computeBoundingSphere() 方法用于计算几何体的包围球,返回值为包围球对象。
.boundingSphere 属性用于获取几何体的包围球,返回值为包围球对象。
多物体包围
.union() 方法用于合并两个包围盒,返回值为合并后的包围盒对象。
注意: 这里涉及到物体的合并,那么需要先更新世界矩阵,再应用矩阵。
.setFromObject() 方法用于从物体中获取包围盒,返回值为包围盒对象。
扩展
.getCenter() 方法用于获取包围盒或包围球的中心点,返回值为向量对象。
Geometry.center() 几何体居中,返回值为几何体对象。
.updateWorldMatrix() 方法用于更新几何体的世界矩阵,返回值为几何体对象。
.applyMatrix4(matrix) 方法用于将指定的矩阵应用于几何体的顶点,返回值为几何体对象。
如果存在物体和包围盒的变换,那么需要先更新世界矩阵,再应用矩阵。