第一部分 基础篇 2
第1章 自然人机交互 2
1.1 什么是自然交互 2
1.2 科幻电影场景的人机交互 3
1.3 自然人机交互技术发展现状 4
1.4 本章小结 8
第2章 Xtion硬件设备 9
2.1 Xtion设备简介 9
2.1.1 Xtion设备的类型 9
2.1.2 Xtion设备的功能 10
2.1.3 Xtion设备的规格 10
2.2 Xtion设备的优势 11
2.2.1 Xtion和Kinect的区别 11
2.2.2 硬件设备的软件支持 12
2.3 深度感应器原理 14
2.3.1 感应器架构 14
2.3.2 深度感应器工作原理 15
2.3.3 深度精确度分析 16
2.3.4 无法侦测物体深度 17
2.4 本章小结 19
第3章 OpenNI开发方案 20
3.1 初识OpenNI 20
3.1.1 OpenNI架构 20
3.1.2 OpenNI支持的模块 22
3.1.3 OpenNI的功能 23
3.1.4 OpenNI中的对象 24
3.1.5 OpenNI版本更新说明 25
3.2 OpenNI生产节点 27
3.2.1 生产节点的类型 28
3.2.2 生产节点概念图 28
3.2.3 生成和读取数据 30
3.2.4 OpenNI接口的配置 31
3.3 OpenNI应用 31
3.3.1 Xtion Controller应用 31
3.3.2 INOUT应用 31
3.3.3 Artec Studio应用 31
3.3.4 体感技术在初音未来上的应用 33
3.4 本章小结 33
第二部分 准备篇 36
第4章 Xtion开发准备工作 36
4.1 下载OpenNI及相应程式 36
4.1.1 下载SDK 36
4.1.2 下载Middleware 37
4.1.3 下载OpenNI以及相应的NTTE 38
4.2 安装OpenNI 38
4.2.1 Windows环境下的准备工作 38
4.2.2 OpenNI档案及相关环境 39
4.2.3 加载设备驱动 40
4.2.4 检测Xtion设备 40
4.2.5 NiViewer基本控制方法 41
4.3 使用Xtion的注意事项 41
4.4 本章小结 42
第5章 搭建基础的Xtion体感开发环境 43
5.1 创建控制台工程 43
5.2 配置工程OpenNI环境 45
5.3 本章小结 49
第6章 初识Xtion体感开发 50
6.1 OpenNI基础应用 50
6.1.1 上下文对象初始化 50
6.1.2 创建生产节点 51
6.1.3 使用XML文档中的生产节点 52
6.1.4 错误信息返回 53
6.1.5 开始产生数据 54
6.1.6 停止产生数据 54
6.1.7 上下文对象资源释放 55
6.1.8 更新数据 55
6.1.9 镜像设置 56
6.1.10 图像位置校正 57
6.2 图生成器 58
6.2.1 获取支持图输出模式 58
6.2.2 图生成器输出模式 59
6.2.3 获取和设置图输出模式 59
6.2.4 获取图像素字节数 60
6.3 深度生成器 61
6.3.1 获取深度元数据对象 61
6.3.2 获取深度图 61
6.3.3 获取设备最大深度 62
6.3.4 获取设备视野范围 62
6.3.5 绝对坐标和相对坐标转换 63
6.3.6 获取用户位置功能 64
6.4 用户生成器 64
6.4.1 获取用户数量 65
6.4.2 获取用户 65
6.4.3 获取用户质心 66
6.4.4 获取用户像素 66
6.4.5 注册用户回调函数 67
6.4.6 获取骨架功能 68
6.4.7 获取姿势侦测功能 68
6.5 场景分析器 69
6.5.1 获取场景元数据对象 69
6.5.2 获取场景地板 69
6.5.3 获取场景标识段 70
6.6 图生成器的概念及功能 70
6.6.1 图元数据对象 71
6.6.2 输出模式设定 72
6.7 OpenNI程序流程 73
6.7.1 初始化Context 75
6.7.2 建立Production Node 75
6.7.3 开始产生资料 75
6.7.4 更新、读取资料 76
6.7.5 处理读取的资料 76
6.7.6 结束和错误侦测 76
6.8 本章小结 77
第三部分 进阶篇 80
第7章 人体骨架追踪 80
7.1 坐标系 80
7.1.1 绝对坐标 80
7.1.2 相对坐标 81
7.1.3 相对坐标和绝对坐标的转换 81
7.2 关节 82
7.2.1 OpenNI可侦测的关节点 82
7.2.2 读取关节资料函数 83
7.2.3 关节位置的平滑化 84
7.3 人体骨架追踪流程 85
7.3.1 需要特定姿势的骨架追踪 85
7.3.2 不需要特定姿势的骨架追踪 86
7.3.3 使用现有校正资料 87
7.4 人体骨架追踪程序搭建流程 87
7.4.1 创建并初始化设备上下文 88
7.4.2 创建并设定生产节点 88
7.4.3 注册回调函数 89
7.4.4 开始侦测数据 92
7.4.5 更新数据 92
7.4.6 得到用户信息 93
7.5 人体骨架识别范例 94
7.6 本章小结 97
第8章 手势识别与手部追踪 98
8.1 手势识别原理 99
8.1.1 OpenNI支持的手势 99
8.1.2 遍历NTTE支持的手势 99
8.1.3 添加手势与回调函数 99
8.1.4 手势识别范例 102
8.2 NITE控制 104
8.2.1 NITE Control函数详解 104
8.2.2 NITE Control范例 106
8.3 手部追踪原理 110
8.3.1 手心生成器回调函数注册 110
8.3.2 手部追踪初始化 110
8.4 本章小结 111
第9章 录制与重播 112
9.1 录制 112
9.1.1 创建录制器 113
9.1.2 设置录制目标档案 113
9.1.3 获取录制目标档案 113
9.1.4 添加录制节点 114
9.1.5 删除录制节点 114
9.2 重播 115
9.2.1 设置重复播放 115
9.2.2 设置和获取播放源资料 115
9.2.3 设置重播起始时间 116
9.2.4 获取当前播放位置信息 117
9.2.5 检索播放器中的节点 118
9.2.6 判断是否播放结束 118
9.2.7 注册播放结尾事件回调函数 118
9.2.8 设置回放速率 119
9.3 本章小结 119
第10章 限制生产节点的建立条件 120
10.1 有条件地建立生产节点 120
10.1.1 添加限制条件 121
10.1.2 设置限制条件 121
10.1.3 建立生产节点 121
10.2 通过限制条件列举符合条件的生产节点 122
10.3 根据节点信息建立生产节点 122
10.4 本章小结 123
第11章 使用XML文档初始化 124
11.1 XML文档设定参数 124
11.1.1 XML文档基本架构 124
11.1.2 XML文档中的节点 126
11.1.3 XML文档使用范例 127
11.2 使用XML文档配置功能 128
11.2.1 强制录制ONI文档的XML配置 128
11.2.2 资料产生 129
11.3 本章小结 129
第12章 声音数据的获取与使用 130
12.1 声音生成器 130
12.1.1 创建声音生成器 130
12.1.2 获取声音数据 131
12.1.3 设置声音设备的输出模式 132
12.1.4 注意事项 132
12.2 声音数据的处理 132
12.2.1 声音录制 133
12.2.2 声音播放 134
12.3 本章小结 136
第13章 彩色图像的获取和贴图 137
13.1 OpenNI框架支持的图像格式 137
13.2 图像生成器 138
13.2.1 创建图像生成器 138
13.2.2 获取图像数据 139
13.2.3 设置及获取图像生成器的输出格式 140
13.3 获取RGB影像及贴出RGB影像 141
13.4 本章小结 143
第四部分 实战篇 146
第14章 体感鼠标模拟 146
14.1 手部追踪与鼠标模拟 146
14.2 程序编写前的准备工作 146
14.2.1 环境准备 146
14.2.2 界面准备 149
14.2.3 鼠标相关参数配置准备 149
14.3 初始化 149
14.3.1 对话框初始化 150
14.3.2 载入ini文档中的配置 151
14.3.3 OpenNI程序环境初始化 151
14.4 程序设计 154
14.4.1 获取深度图 154
14.4.2 获取用户数据 155
14.4.3 鼠标左右手模式的选择及切换 156
14.4.4 滚轮控制放大和缩小 157
14.4.5 左手控制鼠标 158
14.4.6 右手控制鼠标 159
14.4.7 鼠标事件指令发送 161
14.4.8 悬停状态设计 163
14.5 本章小结 165
第15章 Xtion玩《街头霸王》 166
15.1 用身体控制游戏人物 166
15.1.1 人物基本操控动作 167
15.1.2 通用招式动作设计 167
15.1.3 游戏人物的特有招式设计 168
15.2 创建工程、配置工程环境 169
15.3 初始化 171
15.3.1 读取深度数据 172
15.3.2 处理深度数据 172
15.3.3 获取骨架 173
15.3.4 骨架数据的初步处理 174
15.4 Ken人物动作的表述 176
15.4.1 轻拳 176
15.4.2 跳起 178
15.4.3 波动拳 180
15.4.4 神龙拳 183
15.5 虚拟按键机制 186
15.6 本章小结 188
第16章 体感方向盘玩赛车类游戏 189
16.1 体感方向盘设计 189
16.1.1 操控方向盘基本动作 189
16.1.2 虚拟线性手柄模拟方向盘 189
16.2 体感方向盘程序开发初始化 191
16.2.1 环境初始化 191
16.2.2 虚拟手柄初始化 193
16.3 模拟方向盘操控 196
16.3.1 获取用户信息 196
16.3.2 左右方向的控制 197
16.3.3 油门与刹车 199
16.3.4 发送指令给虚拟线性手柄 200
16.4 本章小结 201
第17章 Xtion控制机器人 202
17.1 体感控制机器人需求分析 202
17.1.1 了解机器人构造 202
17.1.2 如何用身体操控机器人 203
17.1.3 机器人操控程序界面设计 203
17.2 初始化 204
17.2.1 界面初始化 204
17.2.2 体感追踪初始化 206
17.2.3 回调函数 207
17.3 控制机器人 207
17.3.1 连接机器人 207
17.3.2 发送指令 208
17.4 机器人程序代码实现 209
17.4.1 骨骼数据的初步获取 209
17.4.2 左肩的体感控制 211
17.4.3 大臂转动的控制 213
17.4.4 肘部角度计算 215
17.4.5 手部角度计算 215
17.4.6 小手臂转动 222
17.5 本章小结 222
第五部分 高级篇 224
第18章 BVH骨架转换 224
18.1 运动捕捉技术简介 224
18.1.1 典型的运动捕捉设备组成 225
18.1.2 传统捕捉技术 225
18.1.3 运动捕捉技术应用 228
18.1.4 运动捕捉技术优缺点 229
18.2 动作捕获数据 230
18.2.1 解析BVH文件 230
18.2.2 骨架结构 231
18.2.3 解读数据 232
18.3 旋转 233
18.3.1 基础2D旋转 233
18.3.2 3D坐标轴旋转 234
18.4 欧拉角 237
18.4.1 从欧拉角转换到矩阵 238
18.4.2 从矩阵转换到欧拉角 238
18.4.3 从骨架数据中提取欧拉角 239
18.5 本章小结 241
第19章 OpenNI Unity工具包 242
19.1 准备工作 242
19.1.1 下载和安装 243
19.1.2 创建基本对象 244
19.2 开始游戏 247
19.2.1 查看控制台中初始化过程 247
19.2.2 查看传感器的深度视图 248
19.2.3 雷达视图侦测用户 249
19.3 添加骨架模型 250
19.3.1 导入士兵模型 251
19.3.2 加入人物模型 252
19.3.3 修复模型 252
19.3.4 连接骨骼控制器 252
19.3.5 骨架匹配 254
19.3.6 模型制成预制件 257
19.4 添加用户选择器 257
19.4.1 用户与玩家的选择 258
19.4.2 美化 259
19.5 本章小结 259
附录BVH文件格式示例 260