(翻)TUIO协议

本文介绍了一个简单的教程,教你如何使用Flash客户端(exe或swf)的TUIO模拟器。首先需要安装flashplayer9++和JavaRuntime6+等环境。接着,通过几个步骤启动模拟器,可以看到在Test.exe中模拟出的触摸效果。此外,文中还解释了TUIO协议的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

 

前言:

       一直想做一个简单的教程关于如何使用flash客户端(exe或swf)的TUIO模拟器。如果你不知道TUIO协议是什么,请先阅读本文TUIO介绍的部分.

需求环境:

1、flash player 9++(一般浏览器都会带的),没有的请下载

2、Java Runtime 6+,没有的请下载

说明:

1>、下载附件并解压到你的桌面;

2>、打开Flosc.jar,点击start;

3>、打开Simulator.jar

4>、打开Test.exe;

5>、返回Simulator.jar并且在里面用鼠标画圆,你会在Test.exe里看到相应的效果。可以使用shift+鼠标来模拟多个点触摸(更多信息请参照Simulator里面的帮助文件)。

原理:

image

基本步骤:

1、TUIO(OSC)数据是从Simulator或者触摸库中的“osc.exe”;

2、FLOSC通道将OSC数据(UDP)转换为XMP(TCP);

3、flash客户端通过XML串口来接收和识别XML数据,并在你的应用程序中渲染鼠标的事件。

注意:

• 主机:localhost -----端口:3000/3333

• TUIO和OSC的数据必须一致

• 需要步骤2的原因是flash不能识别UDP数据,所以我们要转换为TCP

• 直接二值化的方法没有在本教程中涉及,要了解请移步到Binary Socket Connection in flash.

 

TUIO是什么?

     TUIO(Table-Top User Interfaces Objects)是一种简单通用的协议,被设计于特定要求的触摸屏设备人机界面。灵感来自于互连的想法存在于各种表面互动的接口如reacTabAudioTouch。TUIO协议已经在OpenSound Control上实施,并且可以在支持这种协议任何平台中使用。

简单的说:TUIO是一种格式化OSC数据的标准方法。

了解更多请阅读文章《TUIO Documentation》.

消息语法:

当TUIO应用OSC会使用它的基本语法:

参数:

     我们在表面互动界面非常重视的对象属性在这部分的参数定义中反映了出来。每一个对象都会分配一个session ID,非常必要的唯一标识未加标签在连续帧的对象,在这种情况下,多个对象标记为相同的classID同时出现在表面。

      其中的一些参数(id、position和angle)直接由传感器获取。其他的(速度、加速度)派生从这些主要参数使用定时信息。计算这些参数在低水平侧的触摸用户接口系统允许一个更高效的计算,因为必要的计时信息不需要被转移到客户端。

参数允许使用下面一组信息:

s                               sessionID, temporary ob ject ID, int32
i                               classID, fiducial ID number, int32
x, y, z                         position, float32, range 0...1
a, b, c                         angle, float32, range 0..2PI
X, Y ,Z                         movement vector (motion speed & direction), float32
A, B, C                         rotation vector (rotation speed & direction), float32
m                               motion acceleration, float32
r                               rotation acceleration, float32
P                               free parameter, type defined by OSC packet header

配置文件:

      我们定义一组配置文件,它适用于大多数桌面可触摸的用户界面。这使得物体跟踪和鼠标在在二维表面,在特殊情况下也在桌面上方三维空间表面。如果其中一个预定义的配置文件不满足系统的要求我们还允许所谓的原始资料,发送原始传感器数据,以及自由形式配置文件,它允许一个用户定义的一组参数传送。

2D的互动表面:

3D的互动表面:

自定义的配置文件:

 

TUIO主页

OSC主页

多点触控TUIO模拟器

转载于:https://www.cnblogs.com/leven20061001/archive/2012/10/26/2740757.html

### 如何在 Unity 中实现 TUIO 协议 #### 准备工作 为了能够在 Unity 中成功集成并使用 TUIO 协议,开发者需要准备一些基础环境。确保已经安装了最新版本的 Unity 编辑器,并熟悉基本操作流程[^2]。 #### 获取必要的库文件和支持工具 访问提供的项目地址 `https://gitcode.com/open-source-toolkit/28831` 下载包含 TUIO 支持的 Unity 工程实例。此工程不仅包含了完整的 Unity 项目结构,而且预配置好了所有必需的插件来解析来自外部设备(如摄像头或其他传感器)传入的数据流[^1]。 #### 导入库到自己的Unity项目中 一旦下载完成之后,在本地创建一个新的或打开现有的 Unity 项目。接着按照如下方式导入上述获得的资源包: 1. 将解压后的 Assets 文件夹内的内容复制粘贴至自己项目的相应位置; 2. 如果存在 Plugins 或者 Scripts 等特定目录,则同样将其整体迁移过来; 这样做的目的是为了让当前开发环境中具备处理 TUIO 数据的能力。 #### 修改场景以适应TUIO输入源 对于想要启用多点触控特性的具体游戏对象而言,需为其挂接专门编写的脚本来监听由 TUIO 发送来的消息。下面给出了一段简单的 C# 脚本作为示范,用于捕捉触摸事件并将它们可视化显示出来: ```csharp using UnityEngine; using System.Collections.Generic; public class TuioReceiver : MonoBehaviour { private Dictionary<int, Vector2> touches = new Dictionary<int, Vector2>(); void Update() { foreach (var touch in Input.touches) { // 这里假设Input类已经被适配成可以接收TUIO数据的形式 switch(touch.phase){ case TouchPhase.Began: touches[touch.fingerId] = touch.position; break; case TouchPhase.Moved: touches[touch.fingerId] = touch.position; Debug.Log($"Touch moved to position: {touch.position}"); break; default: if(touches.ContainsKey(touch.fingerId)){ touches.Remove(touch.fingerId); } break; } } DrawTouches(); } void DrawTouches(){ GL.Begin(GL.LINES); foreach(var item in touches.Values){ GL.Vertex3(item.x,item.y,-0.5f); GL.Vertex3(item.x,item.y,+0.5f); } GL.End(); } } ``` 请注意这段代码中的 `Input.touches` 实际上应该被替换为真正实现了 TUIO 接口的方法调用,因为默认情况下 Unity 的 `Input` 类并不直接支持该协议[^4]。 #### 测试与调试 最后一步就是运行程序测试效果了。如果一切正常的话,当有新的触碰发生时,屏幕上会显示出对应的线条标记表示手指的位置变化情况。当然这只是一个非常基础的例子,实际应用当中可能还需要考虑更多细节上的优化调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值