多点触摸入门心得

我大概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

你可能感兴趣的:(C++,c,ext,C#,Flash)