Files
planet/docs/plans/earth-motion-gesture-interaction-v2-plan.md
2026-05-10 22:06:01 +08:00

67 lines
4.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Earth Motion Gesture Interaction V2 Plan
**状态**:已实现主体交互,并按实测调整。当前浏览器识别保留右手导航、头部切目标、左手上下切动捕图层、双手张开/收拢缩放双手上举确认暂时关闭。Motion 目标展示已改为 `CruiseSequencer` + `PresentationController` 的 persistent 展示。
## Summary
把动捕从“几个单点手势触发函数”升级为一套更像大屏遥控器的交互层右手负责地球导航头部负责候选切换左手上下切换动捕候选图层双手负责缩放调试面板支持“只显示骨骼”和暂停匹配。进入动捕模式后Earth 自动软选中屏幕中心附近的正面可交互目标;确认动作预留为把目标升级为锁定,并用巡航/引导线式详情打开,不再模拟鼠标点击。
## Key Changes
- 手势语义 v1 固定为稳健小集:
- 修正当前左右挥手语义反向问题手势名以用户感知方向为准provider 层输出正确 `rotate_left` / `rotate_right`
- 右手左/右/上/下挥控制地球水平/垂直旋转,新增 `rotate_up``rotate_down`
- 双手张开/靠近明确映射为 `zoom_in` / `zoom_out`
- 头往左/右歪新增 `focus_prev` / `focus_next`,在当前自动候选目标之间切换。
- 左手上/下挥新增 `layer_prev` / `layer_next`,切换当前动捕候选图层并聚焦该图层最近目标。
- 双手确认手势暂时关闭,避免与缩放和站姿误触混淆;协议仍保留 `confirm`
- Motion Provider / Protocol
- 扩展 `MOTION_GESTURES`,新增 `rotate_up``rotate_down``focus_prev``focus_next``layer_prev``layer_next`
- Browser Camera provider 扩展 pose joints保留肩/肘/腕,增加头部关键点,用于判断头歪。
- 右手作为导航手;左手独立控制动捕候选图层。
- 每类手势使用独立阈值和 cooldown避免缩放/确认/旋转互相误触。
- Earth 交互层:
- Motion adapter 支持水平/垂直旋转和 focus 切换 callback。
- 进入动捕模式后,周期性从可交互对象中选出屏幕中心最近、位于地球正面的候选。
- 软选中目标独立于 `lockedObject`,用 hover/linked 视觉态展示,不立即打开详情。
- `focus_prev` / `focus_next` 在候选列表中切换;列表按屏幕中心距离、正面可见性、当前图层可见性排序。
- `confirm` 预留为将软选中目标升级为 locked并打开引导线详情若没有候选显示状态提示。
- 调试面板:
- 在动捕 HUD / drawer 内增加“只显示骨骼”开关。
- 增加“停止匹配动作”开关:暂停 gesture 执行,但不关闭摄像头预览或骨架绘制。
- 设置持久化到 `planet.earth.settings.v2.shared.motionDebugSkeletonOnly`
- 开启后 canvas 不绘制视频帧,只绘制深色背景 + 红/绿骨骼线;摄像头仍继续用于识别。
## Test Plan
- Browser provider 单元测试:
- 右手左/右挥输出的 `rotate_left` / `rotate_right` 与用户语义一致。
- 右手上/下挥输出 `rotate_up` / `rotate_down`
- 双手张开输出 `zoom_in`,双手靠近输出 `zoom_out`
- 头部左右倾斜输出 `focus_prev` / `focus_next`
- 双手确认动作暂时不会触发。
- Motion adapter 测试:
- 新增 gesture 能通过 `normalizeGestureMessage`
- `rotate_up/down` 调用垂直旋转逻辑。
- `focus_prev/focus_next` 调用候选切换 callback。
- `confirm` 在协议层保持兼容;浏览器 provider 当前不主动发出。
- Earth 前端验证:
- 开启动捕模式后,屏幕中心附近正面目标自动软选中。
- 头歪能在候选之间切换。
- 左手上下切换图层后会在新图层中选择最近目标并展示 persistent 引导线详情。
- 右手上下挥能旋转到南北方向目标。
- “只显示骨骼”开关持久化,刷新后状态保持。
- `bun --check` 覆盖新增/修改 Earth JS 模块,现有 motion tests 全绿。
## Assumptions
- v1 采用“右手导航、头部切候选、左手切图层、双手缩放”的交互模型;确认手势保留协议但暂时关闭浏览器识别。
- 自动选中是 soft focus不覆盖现有 mouse locked selection只有 `confirm` 才真正锁定目标。
- 骨骼-only 只影响调试画面,不关闭摄像头、不影响识别。
- Motion Agent 协议可以接收新增 gesture 名;旧 agent 只发旧 gesture 时仍兼容。