Skip to content

About

青禾校园数字孪生VueDemo

Resources

Stars

10 stars

Watchers

0 watching

Forks

Repository files navigation

青禾校园 · Vue 数字孪生 Demo

Vue 3 + Three.js 的完整本地演示项目,包含真实 WebGL 三维模型、六栋可点击楼宇、三段确定性模拟数据及告警联动。无需 API Key、地图服务或后端。

校园和所有运行数值均为虚构。它是可交互数字孪生可视化原型,未连接真实设备,不能用于现实安全判断。本项目由本次开发任务实现,Seed-2.1-pro 的运行实测记录。

FireShot Capture 054 - 青禾校园 · 数字孪生 -  localhost

直接体验(压缩包已带构建结果)

需要 Node.js 22.12+ 和支持 WebGL 2 的现代浏览器。

  1. 解压完整项目,打开项目目录。
  2. Windows 可双击 start-demo.cmd;其他系统在此目录运行:
node scripts/serve-dist.mjs
  1. 浏览器访问 **http://127.0.0.1:4173**。保持启动窗口打开,结束时按 Ctrl+C。

此方式不需要先安装 npm 依赖。页面、模型和字体不依赖外部 CDN,页面运行不请求第三方 API。请通过本地服务访问,不要双击 dist/index.html。 校园数字孪生02

修改源码与开发

npm ci
npm run dev

默认从 http://127.0.0.1:5173 启动。若端口被其他项目或另一份 Demo 占用,会自动尝试 5174、5175 等后续端口;请打开终端 Local: 后实际显示的地址。无需关闭其他项目,也无需重新安装依赖。初次安装依赖需要联网。

若希望从其他端口开始尝试,可运行 npm run dev -- --port 5180。浏览器自动测试的默认地址仍为 5173;测试另一端口时,请按文末说明设置 DEMO_URL。

npm run build     # 生成 dist,可部署到静态文件服务器
npm run preview   # 预览构建结果
npm test          # 数据、告警、拾取编号与导出逻辑测试
npm run model    # 修改建模脚本后,重新生成 campus.glb

若修改了 src/scene/createCampus.js 或建筑布局数据,先运行 npm run model,再执行构建。仅修改模拟运行数值无需重新生成模型。

功能与体验顺序

  • 三维校园:教学楼、实验楼、图书馆、宿舍、食堂、体育馆;门窗、屋顶、光伏板、道路、停车位、校门、运动场、绿化及场景光照。
  • 空间操作:拖动旋转,滚轮缩放;支持俯视、回到全景、建筑点击与镜头定位。键盘用户可从楼宇列表选择相同建筑。
  • 校园人物:学生在主路和建筑间步行,部分学生沿操场跑道慢跑;老师以较慢速度沿校园道路行走。人物具有转向、手脚摆动和轻微身体起伏。
  • 人物控制:图层面板可隐藏人物,并在低(10 人)、中(24 人)、高(42 人)三档密度间切换。页面进入后台或系统启用“减少动态效果”时,人物动画暂停。
  • 建筑详情:当前功率、代表测点温度、在楼人数、三时刻功率变化、当前建筑功率占比。
  • 时间回放:09:00 → 09:05 → 09:10;每 5 秒推进一帧。可手动切换、暂停、重播;末帧停止,切到后台自动暂停。
  • 告警联动:09:05 实验楼温度升至 32.4℃,出现橙色楼体标记、标签与告警记录;09:10 恢复。告警列表点击可定位楼宇。
  • 功能导航:校园总览、按功率排序的能耗观察、当前告警中心。
  • 图层控制:建筑名称、绿化、日照阴影。
  • 下载:当前运行快照 Markdown、完整模拟数据 JSON、校园 GLB、带模拟标记的三维场景 PNG(截图不含 HTML 界面标签)。
  • 异常处理:模型读取失败可重试;WebGL 不可用时显示明确提示,数据和回放仍能使用。
  • 适配:桌面三栏、平板重排、手机纵向布局;支持减少动画偏好。

推荐演示:保持全景 → 点实验楼 → 切到 09:05 → 打开告警中心 → 点击告警定位 → 切到 09:10 → 回到全景 → 导出快照。

模拟数据口径

数据文件:src/data/campus.json,与文章配套的模拟数据一致。

模拟时间 建筑功率合计 在楼人数合计 实验楼温度 当前告警
09:00 477 kW 1410 30.8℃ 0
09:05 492 kW 1410 32.4℃ 1
09:10 447 kW 1410 29.6℃ 0

只有实验楼 L01 的模拟代表测点温度 ≥ 32℃ 才触发告警。这个阈值只是演示条件,不是实验室安全标准。kW 是当前功率,不是累计用电量 kWh。人数只统计六栋建筑,不是全校园人数;温度是单个模拟代表测点,不是楼宇平均温度。数据刻意固定,便于复现,不假装实时物联网数据。

每帧包含完整数据,因此任意跳转不会累积旧告警。修改数据时保持 buildingId 与模型一致,并同步更新对应断言与文档。

模型来源与 Blender 工作流

随附 public/models/campus.glb 是本项目 Three.js 几何脚本生成的原创程序化模型,不使用第三方地图、贴图或校园资产,不冒称 Blender 生成。模型包含六个建筑根节点以及自定义 buildingId,可直接导入 Blender 编辑。

手动操作:

  1. Blender → 文件 → 导入 → glTF 2.0,选择 public/models/campus.glb。
  2. 编辑建筑外观,保持六个建筑根对象及编号:T01、L01、LIB01、D01、C01、G01。子网格点击会向上查找这个编号。
  3. 导出 GLB 时启用 Custom Properties / 自定义属性,保证 buildingId 和 layer 写入 glTF extras。
  4. 先导出到另一个文件并回读核对,再替换 public/models/campus.glb。保留原模型便于回退,重启或刷新页面验证;重新构建后更新 dist。
  5. 保留以米为单位的比例,并让 glTF 导入导出处理轴向转换。页面使用 Three.js 的 Y 轴向上,原模拟布局中 north/Y 对应页面 -Z。

提供批处理脚本,可在安装 Blender 后运行:

blender --background --factory-startup --python scripts/blender_roundtrip.py -- --export-glb

它会导入模型,校验六个编号,保存 blender/campus.blend 与 blender/campus.roundtrip.glb。脚本创建独立场景,不覆盖随附的原始 GLB。本机未检测到 Blender,该脚本仅做语法检查,未实测 Blender 往返导出;不同 Blender 版本的参数请按实际安装版本核对。

项目结构

campus-twin/
├─ src/
│  ├─ App.vue                    页面、选择状态、播放与下载
│  ├─ components/CampusScene.vue Three.js 加载、相机、拾取、标签与资源释放
│  ├─ components/Icon.vue        本地 SVG 图标
│  ├─ domain/simulation.js       帧快照、告警、汇总与报告
│  ├─ data/campus.json           固定布局与三帧模拟数据
│  ├─ scene/createCampus.js      原创三维几何模型生成器
│  ├─ styles.css                桌面样式
│  └─ responsive.css            平板、手机适配
├─ public/models/campus.glb      可加载、可在 Blender 编辑的模型
├─ scripts/build-model.mjs       模型导出
├─ scripts/blender_roundtrip.py  Blender 导入、保存工程、往返导出
├─ scripts/serve-dist.mjs        无第三方依赖的本地预览服务
├─ tests/                       单元与真实浏览器测试
├─ docs/                        设计计划、验证记录和实际界面截图
├─ dist/                        已构建的静态页面
└─ start-demo.cmd               Windows 直接体验入口

浏览器验证

先启动开发或预览服务,再开一个终端:

npm run test:e2e

Windows 默认优先使用常见安装位置的 Chrome。其他环境可以先运行 npx playwright install chromium;自定义 Chrome 路径通过 CHROME_PATH 环境变量指定,自定义服务地址通过 DEMO_URL 指定。测试包含软件渲染参数,适用于没有物理 GPU 的测试环境,不代表实际设备性能。

测试会保存桌面、告警、手机截图和检查结果到 test-results/。页面使用 GPU 加速,流畅程度取决于浏览器和设备,不承诺固定帧率。

已知边界

  • 当前是演示项目:没有真实传感器、登录权限、设备控制或生产告警服务;刷新页面会回到初始模拟状态。
  • 校园人物为程序化低多边形角色及预设路线,不代表真实人员定位、身份或轨迹,也不会计入楼宇在楼人数。
  • 原型偏简化写实建筑沙盘,不是实景摄影重建或测绘精度模型。
  • Three.js 引擎独立打包;生产构建可能提示单文件大于默认建议阈值,不影响构建成功。模型与代码都随项目提供。
  • 修改模型后,应再核对建筑编号、坐标、点击映射、材质和图层;框架代码不保证任意第三方模型都兼容。
  • 原始项目的 sources/ 引用材料没有被修改。

About

青禾校园数字孪生VueDemo

Resources

Stars

10 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages