Skip to content

MergedObjects

基于Three.js的合并对象管理模块,用于管理大量相似对象的渲染。通过合并几何体技术,将相同材质的多个对象合并为单个几何体,减少绘制调用次数。

类定义

javascript
class MergeInfo
class MergedObject3D extends Object3D
class MergedMesh extends MergedObject3D
class MergedLine extends MergedObject3D
class MergedLineSegments extends MergedObject3D
class MergedLineLoop extends MergedObject3D

常量

MERGED_OBJECT3D_TYPE

合并对象类型枚举,定义支持的合并对象类型。

类型: {Object}
静态: true
只读: true

属性:

  • MESH {string} - 合并网格对象类型
  • LINE {string} - 合并线条对象类型
  • LINE_SEGMENTS {string} - 合并线段对象类型
  • LINE_LOOP {string} - 合并闭合线条对象类型

静态方法

MergedMesh.Create(meshArray, callback)

从网格对象数组创建合并网格,自动计算包围盒和BVH树。

参数:

  • meshArray {Array<Mesh>} - 网格对象数组
  • callback {Function} - 回调函数,接收(uniqueId, index)参数

返回值:

  • {MergedMesh} 合并网格对象

MergedLine.Create(lineArray, callback)

从线条对象数组创建合并线条。

参数:

  • lineArray {Array<Line>} - 线条对象数组
  • callback {Function} - 回调函数

返回值:

  • {MergedLine} 合并线条对象

MergedLineSegments.Create(lineSegmentsArray, callback)

从线段对象数组创建合并线段。

参数:

  • lineSegmentsArray {Array<LineSegments>} - 线段对象数组
  • callback {Function} - 回调函数

返回值:

  • {MergedLineSegments} 合并线段对象

MergedLineLoop.Create(lineLoopArray, callback)

从闭合线条对象数组创建合并闭合线条。

参数:

  • lineLoopArray {Array<LineLoop>} - 闭合线条对象数组
  • callback {Function} - 回调函数

返回值:

  • {MergedLineLoop} 合并闭合线条对象

通用方法

以下方法在所有合并类中通用,继承自MergedObject3D基类:

方法名功能描述参数返回值
getInstanceAttribute($index)获取实例属性$index
getInstanceGeometry($index)获取实例几何体$index
getUniqueIDByIndex($index)根据索引获取唯一ID$index
getInstance($index, objectType)获取实例对象$index {number}, objectType
raycast(raycaster, intersects)射线检测--
setInstanceMatrix($index, matrix)设置实例变换矩阵$index {number}, matrix
setInstanceVisible($index, boolean)设置实例可见性$index {number}, boolean
getAllInstanceWorldBoundingBox()获取所有实例世界包围盒-{Array<Box3>}
getAllInstanceWorldBoundingSphere()获取所有实例世界包围球-{Array<Sphere>}
raycast(raycaster, intersects)射线检测raycaster {Raycaster}, intersects-
computeBVHTree()计算BVH树--
updateMorphTargets()更新变形目标--
toJSON()转换为JSON格式-

重写方法

每个类重写了以下方法,提供类型特定的实现:

getInstance()

类名方法签名特殊功能
MergedMeshgetInstance($index, overWriteMaterial, edgesLineMaterial)支持边缘线材质,可添加边缘线显示
MergedLinegetInstance($index, overWriteMaterial)基础实现,设置renderOrder=2
MergedLineSegmentsgetInstance($index, overWriteMaterial)基础实现,设置renderOrder=2
MergedLineLoopgetInstance($index, overWriteMaterial)基础实现,设置renderOrder=2

toJSON()

每个类设置不同的类型标识:

类名类型标识
MergedMeshMERGED_OBJECT3D_TYPE.MESH
MergedLineMERGED_OBJECT3D_TYPE.LINE
MergedLineSegmentsMERGED_OBJECT3D_TYPE.LINE_SEGMENTS
MergedLineLoopMERGED_OBJECT3D_TYPE.LINE_LOOP

特殊方法

computeLineDistances()

拥有类: MergedLine, MergedLineSegments

计算线条距离,为线条几何体计算累积距离,用于线条材质的效果渲染。

示例:

javascript
// 计算线条距离
mergedLine.computeLineDistances();

使用场景

大量相似对象渲染

  • 建筑模型中的重复构件(如窗户、门、柱子等)
  • 道路系统中的路面和标线
  • 管道系统中的管道和连接件
  • 植被系统中的树木和草地
  • 城市模型中的建筑物和街道设施

渲染优化

  • 减少绘制调用次数
  • 降低GPU负载,支持更多对象渲染
  • 减少内存使用,减少几何体重复
  • 支持LOD系统,动态调整细节级别

动态对象管理

  • 动态控制对象的可见性
  • 更新对象的变换和属性
  • 支持对象的动态添加和删除
  • 提供高效的射线检测和碰撞检测

空间查询加速

  • 使用BVH树加速射线检测
  • 支持视锥剔除和遮挡剔除
  • 提供高效的空间查询接口
  • 支持动态更新空间结构

相关链接

文档内容为北京逆维悦动科技有限公司版权所有,禁止未授权转载