Skip to content

基础概念

本文档介绍了 NIVIOBIM 图形引擎的核心概念和架构设计,帮助您更好地理解和使用引擎。

架构概述

NIVIOBIM 图形引擎采用模块化架构设计,主要分为以下几个层次:

┌─────────────────────────────────────────┐
│               应用层                    │
├─────────────────────────────────────────┤
│               插件层                    │
├─────────────────────────────────────────┤
│               核心层                    │
├─────────────────────────────────────────┤
│               管理器层                  │
├─────────────────────────────────────────┤
│               模型层                    │
├─────────────────────────────────────────┤
│               加载器层                  │
├─────────────────────────────────────────┤
│               渲染层                    │
└─────────────────────────────────────────┘

核心组件

Viewer3D 主引擎

Viewer3D 是引擎的核心类,负责协调各个组件的工作:

  • 场景管理:管理3D场景和2D标签场景
  • 渲染控制:控制WebGL和CSS2D渲染
  • 模型加载:支持多种格式的模型加载
  • 插件系统:管理扩展功能
  • 交互控制:处理用户交互

管理器系统

引擎包含多个专门的管理器,各司其职:

SceneManager - 场景管理器

详见 SceneManager

  • 管理几何场景和CSS场景
  • 协调各个子管理器
  • 计算场景边界
  • 控制对象可见性

RenderManager - 渲染管理器

详见 RenderManager

  • 管理WebGL和CSS2D渲染器
  • 提供FPS监控
  • 支持渐进式渲染
  • 管理环境贴图

CameraManager - 相机管理器

详见 CameraManager

  • 管理透视相机和正交相机
  • 提供轨道控制器
  • 支持相机动画
  • 管理视点标记

LightManager - 灯光管理器

详见 LightManager

  • 管理各种类型的灯光
  • 控制阴影效果
  • 支持自定义灯光
  • 优化光照性能

DataManager - 数据管理器

详见 DataManager

  • 管理3D模型数据
  • 存储2D对象
  • 管理属性数据
  • 提供数据检索

EventManager - 事件管理器

详见 EventManager

  • 提供统一的事件系统
  • 管理事件监听器
  • 支持事件分发
  • 提供资源清理

ExtensionManager - 扩展管理器

详见 ExtensionManager

  • 管理插件系统
  • 支持插件注册
  • 提供插件更新
  • 管理插件生命周期

模型系统

Model - 模型基类

详见 Model

  • 继承自Three.js的Group
  • 管理各种对象组
  • 提供边界计算
  • 支持序列化

对象组类型

BVH树系统

  • 用于优化碰撞检测
  • 支持射线拾取
  • 提供视锥剔除
  • 优化渲染性能

加载器系统

NIVIOBIMLoader

详见 NIVIOBIMLoader

  • 支持NIVIOBIM格式
  • 提供流式加载
  • 支持本地文件加载
  • 支持glTF/GLB格式

插件系统

Plugin - 插件基类

详见 Plugin

  • 继承自EventManager
  • 提供插件开发框架
  • 支持插件生命周期
  • 提供资源管理

内置插件

数据流

模型加载流程

配置文件 → NIVIOBIMLoader → Model → SceneManager → RenderManager
  1. 配置阶段:创建Config对象,设置模型路径和参数
  2. 加载阶段:NIVIOBIMLoader加载模型数据
  3. 处理阶段:将数据转换为Model对象
  4. 场景阶段:SceneManager将模型添加到场景
  5. 渲染阶段:RenderManager渲染场景

事件处理流程

用户交互 → EventManager → 插件系统 → 场景更新 → 渲染更新
  1. 交互阶段:用户进行鼠标、键盘等操作
  2. 事件阶段:EventManager分发事件
  3. 插件阶段:插件处理事件并更新状态
  4. 场景阶段:场景根据插件状态进行更新
  5. 渲染阶段:RenderManager重新渲染场景

性能优化

渲染优化

  • 实例化渲染:相同几何体使用InstancedMesh
  • 合并渲染:相同材质的几何体合并绘制
  • LOD系统:根据距离调整细节级别
  • 视锥剔除:只渲染可见对象

内存优化

  • 对象池:重用对象减少GC压力
  • 纹理压缩:使用压缩纹理格式
  • 几何体优化:减少顶点数量
  • 材质共享:相同材质共享实例

加载优化

  • 流式加载:分批加载大型模型
  • 渐进式渲染:逐步显示对象
  • 缓存机制:缓存已加载的资源
  • 预加载:提前加载可能需要的资源

扩展开发

插件开发

javascript
class MyPlugin extends Plugin {
    constructor(viewer3D, options) {
        super(viewer3D, options);
        this.name = 'MyPlugin';
    }
    
    // 初始化方法(自定义)
    init() {
        // 插件初始化
    }
    
    update(deltaTime) {
        // 插件更新
    }
    
    dispose() {
        // 资源清理
        super.dispose();
    }
}

最佳实践

内存管理

  1. 及时释放资源:调用dispose方法清理资源
  2. 避免内存泄漏:正确移除事件监听器
  3. 监控内存使用:定期检查内存使用情况
  4. 使用弱引用:避免循环引用

错误处理

  1. 捕获异常:使用try-catch处理异常
  2. 提供回退:在出错时提供备用方案
  3. 记录日志:记录错误信息便于调试
  4. 用户提示:向用户显示友好的错误信息

相关链接

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