交互式水效果多点触控






4.60/5 (10投票s)
使用 Tuio 库实现交互式水效果多点触控
引言
我在 CodeProject 上找到了一篇很棒的文章:交互式水面效果。
它很不错,因为你可以通过鼠标点击在平面上产生波纹。
但是,我制作了一个 多点触控桌,并将程序适配了它。所以,我与大家分享我的代码。
视频示例可以在这里找到:http://www.youtube.com/watch?v=EkZDBLxMX9U。
背景
有趣的地方在于(因为有些人可能会说,嗯,为什么写一篇关于这个的文章)是开源的 tuio
库 (http://www.tuio.org/?cpp)。tuio
库使用 UDP 发送触摸事件。有关多点触控桌的更多信息,请参阅 tuio
lib C++ 在 OpenGL 应用程序中的实现示例。
Using the Code
tuio
lib 提供了一个类 TuioListener
,它提供了用于触摸 Event
的方法。
项目在 msvc 中是
在“交互式水面效果”的文章中,该项目是一个 OpenGL 程序。
为了实现 tuiolib
,我创建了一个类 TuioDemo
。这个类有一个构造函数
TuioDemo(int port)
{
tuioClient = new TuioClient(port);
tuioClient->addTuioListener(this);
tuioClient->connect();
if (!tuioClient->isConnected()) {
}
}
端口是用于连接到检测触摸的软件的 UDP 端口号。我的 TuioDemo
继承自 TuioListener
,并且必须实现以下方法
void addTuioObject(TuioObject *tobj) { }
void updateTuioObject(TuioObject *tobj) { }
void removeTuioObject(TuioObject *tobj){ }
void addTuioCursor(TuioCursor *tcur);
void updateTuioCursor(TuioCursor *tcur);
void removeTuioCursor(TuioCursor *tcur);
void refresh(TuioTime frameTime) { }
TuioListener
是一种设计模式:观察者模式。
所有 ***TuiObject
方法都存在于将附着在物理对象上的信标标记放置到用户时。因此,对于这篇文章来说并不有趣。
其他的 ***TuioCursor
是用于手指触摸的。
void addTuioCursor(TuioCursor *tcur); When a finger touch the surface
void updateTuioCursor(TuioCursor *tcur); When a finger move
void removeTuioCursor(TuioCursor *tcur); When a finger untouch.
TuioCursor
获取一些有用的信息,例如:x_pos
和 y_pos
,可以通过方法 getX()
和 getY()
访问。
我创建了 TuioDemo
的另一个方法
void showWave(dmFlotte *flotte)
{
std::list<TuioCursor*> lstCursor = tuioClient->getTuioCursors();
std::list<TuioCursor*>::iterator tcur;
for (tcur=lstCursor.begin(); tcur!= lstCursor.end(); tcur++) {
flotte->setWave((*tcur)->getX(),-(*tcur)->getY(), 128);
}
}
这会根据多点触控表面上同时进行的所有触摸来更新平面。
“flotte”变量(在英语俚语中,意思是水)描述了水面上所有的扰动。此方法在 OpenGL 的更新中调用
void display(void)
关注点
我希望这篇文章能帮助人们使用 tuio 库。
如果您遇到问题,请告诉我。
我正在找工作,所以如果您有兴趣雇佣我,请告诉我。我的电子邮件地址是 charles.vidal ( at ) gmail dot com。
历史
- 2011 年 2 月 1 日:初始发布