第1章 欢迎来到Android世界 1
1.1 配置开发机 1
1.2 下载并安装SDK 2
1.3 配置Eclipse 2
1.4 安装原生开发工具包 6
1.4.1 安装NDK 6
1.4.2 安装Cygwin 6
1.5 创建.Android模拟器 7
1.5.1 安装Android 4.1 7
1.5.2 创建AVD 8
1.6 配置真实设备 9
1.7 将源代码导入Eclipse 11
1.8 本章小结 12
第2章 针对手机或平板电脑的游戏技巧 13
2.1 在Android中编译原生代码 13
2.2 应用程序的体系结构 16
2.3 编译共享库 25
2.4 在设备上测试应用程序 26
2.5 Java对C/C++事件处理的包装 28
2.5.1 独立处理音频 28
2.5.2 级联视频事件 33
2.6 多点触摸 38
2.6.1 MultiTouchGesture 38
2.6.2 MultiTouchScreen 40
2.6.3 TestActivity 41
2.7 本章小结 43
第3章 更多OpenGL与.JNI游戏编程技巧 45
3.1 移动设备的能力 46
3.2 Java方式的OpenGL 47
3.2.1 创建项目 47
3.2.2 Java版本的主Activity 50
3.2.3 表面视图 51
3.2.4 GL线程 54
3.2.5 立方体渲染器 57
3.2.6 Cube类 60
3.3 原生方式的OpenGL 62
3.3.1 主Activitv 64
3.3.2 原生接口类 65
3.3.3 修改原立方体示例 66
3.3.4 原生立方体渲染器 68
3.3.5 原生立方体类 73
3.3.6 编译和运行示例 75
3.4 通过OpenGL ES混合模式缩放视频缓冲区 77
3.4.1 为什么使用混合缩放 78
3.4.2 初始化表面 80
3.4.3 绘制到纹理中 81
3.4.4 当图像的大小不是2的次幂时会发生什么 83
3.5 本章小结 88
第4章 OpenGL ES 2.0的高效图形和可移植性 89
4.1 可移植性 89
4.1.1 处理直接模式 90
4.1.2 加载纹理 92
4.1.3 显示列表、服务器属性和其他 93
4.1.4 使用库包装 93
4.2 OpenGL ES 2.0的高效性 94
4.2.1 着色器 94
4.2.2 GLSL 95
4.2.3 剖析着色器 97
4.3 在Android中调用OpenGL ES 2.0 100
4.4 二十面体项目 100
4.4.1 定义形状 100
4.4.2 处理项目 102
4.4.3 原生二十面体 110
4.5 添加“滑动”和多点触摸的“捏”缩放功能 116
4.6 编译与运行 120
4.7 本章小结 120
第5章 3D射击游戏:Doom 121
5.1 组合使用Java/C,功能无极限 122
5.2 将Doom移植到移动设备 123
5.3 Doom游戏的体系结构 125
5.4 Java层的主Activity 126
5.4.1 创建处理程序 127
5.4.2 游戏布局 128
5.4.3 菜单和选择项处理程序 130
5.4.4 按键和触摸事件处理程序 131
5.4.5 原生回调处理程序 132
5.4.6 导航控件 136
5.5 独立处理音频格式 138
5.6 原生接口类 139
5.6.1 回调监听器 139
5.6.2 原生方法 139
5.6.3 C到Java的回调 140
5.7 原生层 143
5.7.1 原生方法的实现 143
5.7.2 对原始游戏进行修改 154
5.8 使用NDK编译Doom 160
5.9 在模拟器中测试Doom 162
5.10 本章小结 164
第6章 3D射击游戏:Quake 165
6.1 一些关于Quake的术语 165
6.2 代码重用的威力:Quake中的新代码少于500行 166
6.2.1 OpenGL不同于OpenGLES 166
6.2.2 软件渲染是否是合理解决方案 168
6.2.3 NanoGL:救助器 168
6.3 Android架构的Quake 173
6.3.1 Java OpenGL渲染器架构 174
6.3.2 独立处理音频格式 178
6.3.3 处理键盘事件 181
6.3.4 处理触摸事件 183
6.3.5 游戏的启动Activity 185
6.4 原生Quake引擎必需的改动 186
6.4.1 视频处理程序的改动 187
6.4.2 处理X轴旋转(pitch)和Y轴旋转(yaw) 189
6.4.3 处理前进和横向移动 190
6.4.4 音频处理程序的改动 190
6.4.5 修复游戏循环 193
6.5 在设备上运行Quake 195
6.6 本章小结 201
第7章 3D射击游戏:Quake Ⅱ 203
7.1 代码回顾 203
7.2 逃离Java堆的束缚 204
7.3 让Quake Ⅱ引擎在Android中工作 205
7.3.1 代码的可重用性 205
7.3.2 当发生致命错误时如何处理 214
7.3.3 OpenGL立即模式问题 217
7.3.4 视频处理程序 217
7.4 使用NDK编译Quake Ⅱ 221
7.5 在设备或模拟器中运行游戏 224
7.6 Quake Ⅱ在多种设备中的性能表现 227
7.7 本章小结 228
第8章 蓝牙控制器的乐趣 231
8.1 剖析Wiimote 231
8.1.1 查询过程 232
8.1.2 设备连接 233
8.1.3 其他小技巧 235
8.2 Wiimote控制器应用程序 236
8.2.1 Wiimote Android项目 236
8.2.2 WiiC库 245
8.2.3 WiiC JNI接口 250
8.2.4 编译与测试 258
8.3 Zeemote 261
8.4 本章小结 265
第9章 展望未来:增强现实技术与Google TV 267
9.1 什么是AR 267
9.2 AR与Android 268
9.2.1 寻找合适的AR库 269
9.2.2 认识ARToolKit(ARTK) 269
9.2.3 知识汇总 274
9.2.4 故障排除 275
9.3 在Android平台上运行ARToolKitRTK 275
9.3.1 获取视频载体 276
9.3.2 绘制和应用程序生命周期 283
9.4 其他工具箱 284
9.5 Google TV 284
9.5.1 GTV的NDK解决方案 285
9.5.2 GTV模拟器 286
9.6 本章小结 286
附录A 部署和编译技巧 287