让游戏支持复杂手势识别

转载 2013年12月02日 16:50:08

给游戏加入复杂手势识别的功能无疑可以大大增加游戏的趣味性,对于像ios、andriod这样的全触控操作系统尤其如此。这篇文章不是讲解手势识别的论证推倒过程(那些公式看着就头疼,毕竟咱是写程序的不是写论文的,这些东东是怎么来的咱不管,能用就好),也不是讲解ios上面UIGestureRecognizer类的应用(这个暂时只能识别轻触滑动等简单的手势,虽然对于普通应用来说已经足够了,但是对于游戏来说还远远不够)。

 

    这篇文章会帮助你让游戏识别三角形、五角星、圆圈、以及任意自定义的复杂图形。并且由于无论是识别算法还是其应用都非常简单,所以你可以零成本的应用于任何你想要使用的地方。

 

    手势识别算法是"$1 Unistroke Recognizer"。

    这个算法实现起来非常简单,但是识别效率很高,这个就有点类似寻路算法中的A*。它足以满足我们在游戏中的需求,所以没有必要再去探讨神经网络、机器学习什么的了。(其实还有一种更简单的识别算法:我们定义八个方向,鼠标移动的时候判断后一个点相对于前一个点的方向,最终组合成一个由字符串组成的手势代码----比如下上代表一个手势,下右代表一个手势,然后对这个代码与模板进行匹配--这个时候匹配的就是字符串的相似度,要简单很多。这也是浏览器中手势识别常用的方法。不过这种方法应用到游戏中效果不如$1,因为$1会对坐标集合进行正规化,即便我画的图形歪了或者有些走样,它都可以很好的识别出来)。

 

    最初知道这么个算法是看了SDL里面的touch gesture的实现(当初还以为它只能识别$美元符号呢,汗),网上有各个语言版本的实现。推荐大家看看这里(http://depts.washington.edu/aimgroup/proj/dollar/),这里有其对应语言版本的下载,大家也可以先在其js测试程序上试一试效果,非常好玩。同时也有其相关论文和改进(比如支持多点触控手势的$N),喜欢钻研的朋友不要错过。

 

    这里推荐这个版本(http://depts.washington.edu/aimgroup/proj/dollar/others/cpp.bw.zip)。c++实现,代码清晰,使用简单。

    1、在初始化的地方new一个GeometricRecognizer实例recognizer_,调用recognizer_->loadTemplates()方法。注意这个函数只是测试时使用,真正设计时,其手势模板应该是从配置文件中读取。

    2、在TouchMove(或者是MouseMove,依平台而定)的时候将坐标push_back到一个集合里(touch_points_)。

    3、在TouchEnd的时候调用: RecognitionResult r = recognizer_->recognize(touch_points_);

    我们对其返回的结果进行判断,如果(r.name != "Unknown" && r.score > 0.5),那么这就是我们识别出来的一个手势。name是手势模板名称,score是其权重,越高则与模板越匹配。

 

    通过简单的几行代码,我们就把手势识别功能加入到游戏中了,这时我们是用其释放魔法,还是做一些特殊的动作都依赖与设计者的创造性了。很有趣,不是吗?

    原文地址: http://blog.csdn.net/langresser_king/article/details/6529334

让游戏支持复杂手势识别

给游戏加入复杂手势识别的功能无疑可以大大增加游戏的趣味性,对于像ios、andriod这样的全触控操作系统尤其如此。这篇文章不是讲解手势识别的论证推倒过程(那些公式看着就头疼,毕竟咱是写程序的不是写论...
  • wgaminoc404
  • wgaminoc404
  • 2014年11月15日 17:11
  • 174

Android-自定义手势识别-复杂手势识别

一、概述 1、手势交互过程(原理) (1)触屏一刹那,触发MotionEvent事件 (2)被OnTounchListener监听,在onTouch()中获得MotionEvent对象 (3)...
  • SQ_Bang
  • SQ_Bang
  • 2016年07月17日 20:37
  • 961

Leap Motion+EasyAR AR手势识别开发教程

AR开发者交流群:605785368 AR开发者社区: 今天给大家带来用Leap Motion(本想用Usens Fingo来开发,原谅我没搞到其sdk)和视辰家的EasyAR SD...
  • albertleebob
  • albertleebob
  • 2017年04月12日 16:05
  • 1555

Kinect for Windows SDK开发入门(十):手势识别 上:基本概念

像点击(clicks)是GUI平台的核心,轻点(taps)是触摸平台的核心那样,手势(gestures)是Kinect应用程序的核心。和图形用户界面中的数字交互不同,手势是现实生活中存在的动作。如果没...
  • qq1175421841
  • qq1175421841
  • 2015年12月15日 11:18
  • 3674

Htc Vive VR 手势识别插件教程 1.1 版本(附1.0版本教程PDF)

插件更新了,所以我也把教程更新一下,当然,1.0版本的教程仍然有可供参考之处。所以,旧版本中已经有讲的知识点,这个版本我就不重复去讲了。这里将1.0版本的教程PDF放在附件里面,以供大家参考。   ...
  • u013131744
  • u013131744
  • 2017年03月22日 18:44
  • 893

LeapMotion开发(六)-- 手势识别_猜拳(实时率很高,有动图展示)

利用LeapMotion+VS2015+opencv310开发的猜拳小Demo
  • zmdsjtu
  • zmdsjtu
  • 2016年10月09日 14:09
  • 3663

深度相机(六)--Kinect v2.0 手势样本库制作

今天的笔记主要是介绍Kinect的手势,目录为1.如何使用Kinect Studio录制手势剪辑;2.如何使用Visual Gesture Builder创建手势项目;3.如何在我的C#程序中使用手势...
  • App_12062011
  • App_12062011
  • 2016年09月25日 22:59
  • 3358

浅谈Qt手势扩展

在目前的嵌入式领域,Qt 被普遍应用于GUI的设计中。 手势识别做为移动设备必不可少的技术,Qt对手势也提供了一些支持。 Qt主要为用户提供了以下几种手势: Tap,Press,Swipe,Pa...
  • nyist_ming
  • nyist_ming
  • 2015年12月08日 16:39
  • 1938

基于视觉手势识别系统的方法总结

一个基于视觉手势识别系统的构成应包括:图像的采集,预处理,特征提取和选择,分类器的设计,以及手势识别。其流程大致如下: 其中有三个步骤是识别系统的关键,分别是预处理时手势的分割,特征提取和选择...
  • lpflying2012
  • lpflying2012
  • 2014年03月31日 16:14
  • 4384

手势识别(二)--单目手势识别算法总结

本文参考:http://blog.csdn.net/lpflying0106/article/details/22674657 做修改补充(其实主要是不高兴写这多么,找了个差不多能表达意思的文章改改)...
  • App_12062011
  • App_12062011
  • 2016年10月07日 13:50
  • 10896
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:让游戏支持复杂手势识别
举报原因:
原因补充:

(最多只允许输入30个字)