yumoqing d945e414d7 feat(scene3d): Scene3D widget — bricks3d 最小闭环(后端声明式场景描述符→three.js 本地渲染→entity_tapped 事件回传)
- scene3d.js: Scene3D widget(VBox 子类),支持 box/sphere/cylinder/model 实体
  内联 scene 或 scene_url 两种描述符来源;Raycaster 拾取→dispatch entity_tapped
  活动对象(scene/camera/renderer/mesh)只存实例私有字段,防 JSON.stringify 循环引用
  s3_dispose() 释放 WebGL 资源;set_entity_color/set_entity_visible 公共 API
- build.sh: scene3d.js 加入 SOURCES
- 3parties/three.min.js: r149 UMD 全局版(608KB,npmmirror 下载)
- examples/scene3d_demo.html: 演示页(4 实体场景 + scene_ready/entity_tapped binds)

验证(CDP 实测):场景就绪事件 点击拾取 entity_tapped→binds→状态栏更新
球点击变色 #f59e0b→#ef4444 全链路通过;干净重载 0 JS 异常
2026-08-27 11:31:10 +08:00
..
2025-07-16 14:28:55 +08:00
2025-07-16 14:28:55 +08:00
2025-07-16 14:28:55 +08:00
2025-07-16 14:28:55 +08:00
2025-07-16 14:28:55 +08:00
2025-07-16 14:28:55 +08:00
2025-07-16 14:28:55 +08:00
2025-07-16 14:28:55 +08:00
2025-07-16 14:28:55 +08:00
2025-07-16 14:28:55 +08:00
2025-07-16 14:28:55 +08:00
2025-07-16 14:28:55 +08:00
2025-07-16 14:28:55 +08:00
2025-07-16 14:28:55 +08:00
2025-07-16 14:28:55 +08:00
2025-07-16 14:28:55 +08:00
2025-07-16 14:28:55 +08:00
2025-07-16 14:28:55 +08:00
2025-07-16 14:28:55 +08:00
2025-07-16 14:28:55 +08:00
2025-07-16 14:28:55 +08:00
2025-07-16 14:28:55 +08:00
2025-07-16 14:28:55 +08:00
2025-07-16 14:28:55 +08:00
2025-07-16 14:28:55 +08:00
2025-07-16 14:28:55 +08:00
2025-07-16 14:28:55 +08:00
2025-07-16 14:28:55 +08:00
2025-09-29 21:46:43 +08:00
2025-07-16 14:28:55 +08:00
2025-07-16 14:28:55 +08:00
2025-07-16 14:28:55 +08:00
2025-07-16 14:28:55 +08:00
2025-07-16 14:28:55 +08:00
2025-07-16 14:28:55 +08:00
2025-07-16 14:28:55 +08:00
2025-07-16 14:28:55 +08:00
2025-07-16 14:28:55 +08:00
2025-07-16 14:28:55 +08:00
2025-07-16 14:28:55 +08:00
2025-07-16 14:28:55 +08:00
2025-07-16 14:28:55 +08:00
2025-07-16 14:28:55 +08:00
2025-07-16 14:28:55 +08:00
2025-07-16 14:28:55 +08:00
2025-07-16 14:28:55 +08:00
2025-07-16 14:28:55 +08:00
2025-07-16 14:28:55 +08:00
2025-07-16 14:28:55 +08:00
2025-07-16 14:28:55 +08:00
2025-07-16 14:28:55 +08:00
2025-07-16 14:28:55 +08:00
2025-07-16 14:28:55 +08:00
2025-07-16 14:28:55 +08:00
2025-07-16 14:28:55 +08:00
2025-07-16 14:28:55 +08:00
2025-07-16 14:28:55 +08:00
2025-07-16 14:28:55 +08:00
2025-07-16 14:28:55 +08:00
2025-07-16 14:28:55 +08:00
2025-07-16 14:28:55 +08:00
2025-07-16 14:28:55 +08:00
2025-07-16 14:28:55 +08:00
2025-07-16 14:28:55 +08:00
2025-07-16 14:28:55 +08:00
2025-07-16 14:28:55 +08:00
2025-07-16 14:28:55 +08:00
2025-07-16 14:28:55 +08:00
2025-07-16 14:28:55 +08:00
2025-07-16 14:28:55 +08:00
2025-07-16 14:28:55 +08:00
2025-07-16 14:28:55 +08:00
2025-07-16 14:28:55 +08:00
2025-07-16 14:28:55 +08:00
2025-07-16 14:28:55 +08:00
2025-07-16 14:28:55 +08:00
2025-07-16 14:28:55 +08:00
2025-07-16 14:28:55 +08:00
2025-07-16 14:28:55 +08:00
2025-07-16 14:28:55 +08:00
2025-07-16 14:28:55 +08:00
2025-07-16 14:28:55 +08:00
2025-07-16 14:28:55 +08:00
2025-07-16 14:28:55 +08:00
2025-07-16 14:28:55 +08:00
2025-07-16 14:28:55 +08:00
2025-07-16 14:28:55 +08:00
2025-07-16 14:28:55 +08:00
2025-07-16 14:28:55 +08:00