04-功能详解

功能详解

TUIO 1.1 协议详解

TUIO 1.1 定义了以下 OSC 消息集合:

关键概念

每个触控点或物体在生命周期内拥有唯一的 SID(Session ID)。当触控点/物体首次出现时分配新 SID,消失后该 SID 不再使用。

Alive 机制

每帧发送一个 /alive 消息,列出当前所有活跃的 SID。接收端对比当前帧和上一帧的 alive 列表,确定哪些 SID 是新增、保持或已移除。

典型的帧序列:

/tuio/2Dcur alive 0 1 2        ← 当前活跃: SID 0,1,2
/tuio/2Dcur set 0 0.5 0.3 ... ← SID 0 的位置
/tuio/2Dcur set 1 0.7 0.6 ... ← SID 1 的位置
/tuio/2Dcur set 2 0.2 0.8 ... ← SID 2 的位置
/tuio/2Dcur fseq 42 ← 帧编号

坐标系统

NexTuio 画布自动完成像素坐标到归一化坐标的转换。

光标模式详解

  1. 构建 alive 列表(所有活跃光标 SID)
  2. 发送 source 消息(每会话一次)
  3. 发送 alive 消息
  4. 对每个活跃光标发送 set 消息(含位置、速度)
  5. 发送 fseq 消息(帧序号递增)

速度计算

NexTuio 自动计算光标移动速度(dx, dy)和加速度(motionAccel),基于连续帧的位置变化。

物体模式详解

物体生命周期

  1. 创建:点击画布 → 设置 CID 和角度 → 物体加入 alive 列表
  2. 更新:拖拽/旋转 → 定时发送 set 消息更新位置/角度
  3. 销毁:右键删除 → 物体从 alive 列表移除

多点触控模式详解

同时触控数

当前版本不限制同时触控数,受限于操作系统和硬件性能。实际应用中 2-10 个触控点较为常见。

接收端工作流程

UDP 数据到达监听端口
    ↓
解析 OSC 消息
    ↓
判断消息类型 (2Dcur / 2Dobj)
    ↓
更新内部状态 (alive + set)
    ↓
刷新对象树 (50ms 定时器)
    ↓
更新画布渲染
    ↓
日志记录

Alive 解析

坐标转换

程序自动完成转换,用户操作画布时看到的是像素空间。

对象树刷新

对象树通过 50ms 定时器刷新,平衡实时性和性能。在高速触控场景下可能存在轻微延迟。