我大概07年开始接触到多点触摸的概念,当然也是通过Jeff Han那段神奇的视频认识到的(什么?你还没看过?赶紧补课吧~)
Jeff Han在TED大会上的视频地址:http://www.ted.com/talks/jeff_han_demos_his_breakthrough_touchscreen.html
一直到现在,也做了很多多点触摸方面的应用,看到论坛中还是很多新加入的伙伴,不知道怎样开始,我觉得作为一个老鸟(呵呵,总算也混了段时间了),有必要写一篇入门级的文章,让大家尽快可以加入多点触摸的开发行列。
当然以下我主要从软件的角度去谈多点触摸的开发,至于硬件上的DIY,这篇文章暂不涉及,大家上网找找吧,有很多的教程的~
首先,我们先从总体结构上谈谈多点触摸软件。
现在我们自己DIY的触摸屏都是属于Optical Multitouch,说白了就是用红外灯把你手指照亮,然后用摄像头去捕捉你的手指的位置来实现多点触摸。所以,在最低层要有一个摄像头的检测软件,用于捕捉跟踪你的手指位置,这个属于计算机视觉领域的活,别怕,现在开源世界里面已经有了好几个用于多点触摸捕捉的软件了,其中比较早也比较经典的一个就是touchlib。这个软件我没记错的话大概07年中间的时候发布,后来又修改了好久,现在版本已经基本稳定在ver.401。很久没有变化了。
touchlib是用C++编写,最终是以dll(动态链接库)的形式发布,随着touchlib项目一起的(具体参见touchlib源码)还有几个用C++编的例子,比如smoke,mousedrive,osc等。有的看官读到这里也许会问了,那我要开发多点触摸程序,就必须用C++了?非也。如果您是位C++程序员,并且也只准备用C++来开发多点触摸的程序,那么您就别往下看了,去好好看看touchlib里面带的例子吧,看会了就可以开发了。如果您想用其他开发语言(如as3),那就请继续往下看。
在上面提到的几个例子中,有一个程序要特别注意的就是osc。要理解这个程序,你就不得不了解两个协议:osc和tuio。
osc,全名(open sound control),是一个通信协议,定义了一些传输时用的格式,为了方便数据传输用的,比较底层,了解就可以了。
tuio,全名(A Protocol for Table Based Tangible User Interfaces),如果要理解osc.exe机制的话,这个协议可不能放过,它定义了如何在程序中表示触摸界面上出现的实体,如手指。这是touchlib和as3通信的格式。
看到这里有的看官是不是已经开始犯晕了,没事,不想看这些协议也没问题,我画张图您就全明白了~
摄像机--〉touchlib --〉osc --〉flosc --〉as3
又有人问了,这个flosc是个什么东西啊?这是个用java写的类似于桥一样的东西,将osc的消息(tuio格式)经过flosc传给as3。
好了消息传过来了,现在就让我们开始解析以下as3的结构(想用as3开发的同志,下面注意看吧)
先从AS3这个文件夹上看(什么?AS3文件夹在哪里?请上http://code.google.com/p/touchlib/自己下载先),里面一共有三个文件夹ext,int,src。其中ext是外部一些as3库,像pv3d之类的,就甭管它了。src文件夹中是各个flash例子的fla文件也暂时不管了。最重要的就是int这个文件夹中的东西。
int文件夹中又有三个文件夹(靠,耍我们啊~),其中com_old就别去管它了,过时了(人家标明了old嘛)。app文件夹咱们一会儿再去看它。现在先来看flash这个文件夹中的东西。flash文件夹里面只有一个event文件夹,再下去就是五个文件了,这五个就是AS3中实现多点触摸功能最核心的五个类了,咱们一个个看下来:
TUIO.as -- 这个是最主要的类,有两个功能,1.与osc(不会已经忘了它是干什么的吧?看看上面那张图)进行通信,接收osc传来的tuio格式的消息。2.将tuio格式的消息转化为TUIOObject,并且dispatch多点触摸事件。重点去看processMessage这个函数,基本功能都在里面了。
TUIOObject.as -- 这个是类说的白话一点就表示了触摸屏上的触摸点。
TouchEvent.as -- AS3多点触摸事件的定义都在里面了。因为现在AS3 api没有文档,所以要好好看这里面定义的事件类型。
TUIOCursor.as -- 不是很重要的一个类,只是用于调试用的光标。
TUIOSimulator.as -- 看名字就知道了,一个模拟器。其实现在好得模拟器很多,也用不到这个功能了。
好了,最重要的五个文件已经解析完了,当然如果你要理解其中机制的话,还是要你自己去阅读源码,毕竟我不能替代你去读。
下面回到app文件夹,里面又有两个文件夹core和demo。demo从名字上就知道了,是flash实例的源文件,这个先放放。先来看core文件夹,哎哟,这个里面的东西太多了,还是先挑重要的看吧,action文件夹是最重要的一个,因为所有多点的动作(如,放大,缩小,旋转)都是这个里面的类实现的。说句老实话,因为这个里面的类不是一个人写的,所以比较混乱,一共有两个分支:RotatableScalable.as,这个是最早的一个现实旋转和缩放的类,用起来也比较简单,但代码有点混乱。另一个分支是Multitouchable.as,其他开发者觉得老的类结构不好,想写个更清楚的,就出现了这个类,由这个类又衍生了好多其他的类。
所以,该文件夹下面的类都是继承或者是由这两个类改编而来的。具体的大家就自己看吧。
好了,解析的部分先写那么多吧(好累啊~)。以上的部分是给想要研究多点触摸机制的同志看的,如果您觉得我不想知道这些,我就想立刻开始开发多点触摸程序,该从哪里开始呢?
我的建议是,看src文件夹底下的例子吧,这是最快的方法。再下载一个TUIO模拟器和flosc网桥就可以了立刻进行开发了!
模拟器的下载地址:http://nuigroup.com/forums/viewthread/1495/
这个帖子中的附件都有了。
好了,各位看管努力吧~
也欢迎到我的博客看看(虽然更新不够快~):http://hi.baidu.com/summer150
分享到:
相关推荐
用于Windows触摸和基于笔的计算机的数字转换器驱动说明,触摸屏、多点触摸的USB协议,设备描述符,HID报文说明
Unity3D [示例源码]Multi+Touches+Demo 多点触摸加演示案例
使用stm32的usb,配置成HID模式,主动上报数据,模拟手指触摸,这是两个手指的,多个手指的修改下对应的HID描述符就好了
多点触摸测试程序:画点、画线,设置线宽等。。。。增加功能,
winform多点触摸功能
TUIO协议下多点触摸的调试工具。
通过多点触摸去缩小或放大图片
director12下的多点触摸示例程序
今天给大家奉上的是“基于光学原理的多点触摸技术”集合文章,包括: -- 受抑全内反射多点触摸技术(FTIR) -- (正背投式)散射光照明多点触摸技术(DI) -- 激光平面多点触摸技术(LLP) -- 散射光平面照明多点...
linux多点触摸协议简析, 运行在linux,android下面,有一定的参考价值
多点触摸技术原理介绍,多点触摸技术决定触摸应用的未来,本文深入检出的介绍了多点触摸的技术原理
多点触摸盲文输入法,在Android平台上实现输入盲文,并通过语音输出盲文点位。实现盲人的盲文交流
FLASH的触摸开发包touchlib,多点触摸开发包
一个Android应用程序示例,实现多点触摸的手势识别。
多点触摸技术手册的繁体版 国内唯一一本MultiTouch技术书籍
android支持多点触摸的DEMO,在eclipse下编译测试通过
讲述flsh多点触摸的基础知识,事件,动作输入和一些常见问题解决。
必装软件:要先安装adobe api,上网下载安装,10M左右。 使用前的准备: 1、运行server.exe,打开连接...AS3.0多点触摸程序及源文件可以到http://www.cyancdesign.com/category/cyanc-design/multi-touch/进行下载。
PenMount触摸屏控制器的多点触摸功能!rar,PenMount触摸屏控制器的多点触摸功能!
android 2.1 多点触摸演示 具体请参见博客 http://blog.csdn.net/aduovip/article/details/8050564