有关手势识别和跟踪的回调函数的设置在 COpenNI 这个类中进行,但是因为回调函数是
static 类型,所以对应函数里面的变量也必须是 static 类型,但是我们的变量初始化又放在了
类中进行,而 static 类型的变量不能在类中进行初始化,因此最好将回调函数用到的几个 static
类型的变量直接放在了类外,这样虽然达到了效果,不过貌似不是一个完整的类的设计。暂时没
找到好的解决方法。
从官方文档来看,OpenNI 中进行手部跟踪,即采用节点 hand generator 来跟踪需要搭配
手势检测的节点 gesture generator,其代码实现流程如下:
先使用 gesture generator 来侦测特定的手势
当检测到特定的手势后开始进行 handsgenerator 的 starttracking()函数来进行跟踪手
部。
当 hands generator 开始跟踪手部位置时,HandCreate()函数被调用。
以后每当有变化的时候,都会执行 HandUpdate()函数。
如果手势超出了可侦测的范围,则其回自动调用 HandDestroy()函数。
C/c++知识点总结:
如果一个数据类型声明为 auto 了,那么说明该数据类型为 local 局部变量,一般 auot 关
键字可以省略。
map 表示的是一个键值对,其中第一个参数为键值对的类型 id,这个具有唯一性,第二个
是该数据类型的对应值。map 的 cbegin()方法表示的是返回一个常量迭代器。
array 数据类型其实就是一个数组类型,定义它的时为 array<int, n>表示,其长度为 n,
数组中的元素数据类型为 int 型。
static 函数有点类似回调函数,一般是用来记录类对象被引用的次数或者这个函数的地址需
要被外部代码调用。静态函数有 2 个好处,一是只能被其自己的文件使用,不能被其它的文件
使用。二是其它文件可以定义相同名字的函数,不会发生冲突。
如果是在类中使用静态函数,则它是为类服务的而不是为了某一个类的具体对象服务。普通
的成员函数都隐含了一个 this 指针,因为普通成员函数总是与具体的某个类的具体对象的。但
静态成员函数由于不是与任何对象相联系,因此它不具有 this 指针。从这个意义上讲,它无法
访问属于类对象的某个非静态数据成员,也无法访问非静态成员函数,它只能调用其余的静态成
员函数。
由于在本程序中,需要用到回调函数,而回调函数在类中一般需要声明成静态函数,所以在
回调函数中调用类的成员变量时这些变量不能够是非静态的成员变量,编程时一定要注意。比如
说在回调函数中有代码 hands_generator.StartTracking(*pIDPosition);其中
hands_generaotr 是普通私有变量,这时编译代码时会出现如下错误提示:
- 1
- 2
- 3
前往页