《J2ME 3D手机游戏开发详解》PDF下载

  • 购买积分:18 如何计算积分?
  • 作  者:龚剑,刘晶晶编著
  • 出 版 社:北京:人民邮电出版社
  • 出版年份:2007
  • ISBN:9787115167743
  • 页数:618 页
图书介绍:本书分为4个部分:起步篇、基础篇、实战篇和Mascot Capsule篇,循序渐进地讲解了如何使用J2ME开发3D手机游戏。本书详细讲解了JSR184提供的API,重点讲述了纹理、雾化、变换矩阵、投影(目标摄影机和自由摄影机)、帧动画、Morphing变形体和Skinned变形体等关键技术。另外,本书还讲解了传统3D技术在J2ME中的实现。包括HeightMap地图、公告牌技术、粒子系统、碰撞检测、FPS游戏开发、迷宫算法的应用,让读者在阅读、学习了基础技术后,更进一步提高。本书最后讲解了MascotCapsule技术的使用,侧重于游戏架构的搭建,并侧重讲解与M3G区别的地方,并给出了丰富的实例。

第一篇 起步篇 3

第1章 J2ME概论 3

1.1 J2ME的基本概念 3

1.1.1 Java平台技术和应用现状 3

1.1.2 J2ME简介 4

1.1.3 J2ME的体系结构 4

1.1.4 J2ME配置 5

1.1.5 J2ME虚拟机 5

1.1.6 J2ME简表 6

1.2 CLDC简介 6

1.2.1 特征设备 6

1.2.2 CLDC的预审核机制 7

1.2.3 CLDC的安全机制 8

1.2.4 CLDC的网络支持 9

1.2.5 CLDC 1.1的新特性 9

1.3 MIDP应用程序开发 10

1.3.1 MIDP设备需求 10

1.3.2 MIDlet Suite简介 10

1.3.3 MIDP类库 11

1.3.4 MIDlet生存周期 12

1.3.5 MIDlet程序结构 12

1.3.6 MIDP 2.0的新特征 14

1.4 J2ME 3D概述 15

1.4.1 J2ME 3D游戏概述 15

1.4.2 M3G包描述 15

1.4.3 两种开发模式 19

1.4.4 手机3D图像开发技术 20

1.4.5 3D绘制性能和游戏引擎 21

1.5 3D手机游戏的分类和设计概要 22

1.6 本章小结 25

第2章 开发环境的选择和配置 26

2.1 WTK 2.5的安装和配置 26

2.1.1 WTK 2.5简介 26

2.1.2 WTK 2.5的安装 27

2.1.3 MIDlet开发流程 29

2.1.4 WTK 2.5中的3D应用开发 30

2.1.5 设置工程属性 33

2.1.6 MIDlet的打包 36

2.1.7 MIDlet的混淆 36

2.1.8 运行JAR文件 37

2.2 手机厂商SDK 38

2.2.1 诺基亚Carbide.j 1.5的安装和使用 39

2.2.2 索尼爱立信J2ME SDK 2.2.4的安装和使用 42

2.2.3 摩托罗拉SDK 6.3的安装和使用 43

2.3 Jbuilder 2006移动开发环境 44

2.3.1 添加WTK 2.5 45

2.3.2 创建工程 46

2.3.3 添加源文件 48

2.3.4 打包与混淆 50

2.3.5 添加厂家模拟器 53

2.4 Eclipse 3.2.1移动开发环境 56

2.4.1 Eclipse简介 57

2.4.2 安装Eclipse和J2ME插件 57

2.4.3 添加WTK 2.5 61

2.4.4 创建工程 63

2.4.5 运行模拟器 65

2.4.6 打包与混淆 66

2.4.7 添加厂家模拟器 67

2.5 NetBeans 5.5移动开发环境 68

2.5.1 安装NetBeans和移动开发包 68

2.5.2 配置SDK 69

2.5.3 创建项目 71

2.5.4 添加代码并运行 73

2.5.5 导入已有程序 75

2.5.6 项目设置 76

2.6 本章小结 77

第3章 游戏开发相关技术 78

3.1 游戏用户界面(Canvas) 78

3.1.1 屏幕属性 78

3.1.2 屏幕绘制 80

3.1.3 绘制基本操作 81

3.1.4 绘制直线 82

3.1.5 绘制弧形 82

3.1.6 绘制圆角矩形 83

3.1.7 绘制三角形 83

3.1.8 绘制笔触的设置 84

3.1.9 双缓冲技术 84

3.2 游戏的屏幕:GameCanvas类 85

3.2.1 GameCanvas概述 86

3.2.2 绘制双缓冲区 86

3.2.3 实现游戏主循环 87

3.2.4 获取键盘状态 88

3.3 绘制图像 90

3.3.1 生成图像数据 90

3.3.2 图像的锚点 93

3.3.3 图像的截取 94

3.3.4 图像的透明 95

3.3.5 用Photoshop制作PNG透明背景 97

3.3.6 用Fireworks制作PNG透明背景 98

3.4 字体设置 99

3.4.1 外观属性 99

3.4.2 字号属性 99

3.4.3 字形属性 100

3.4.4 默认属性 100

3.4.5 设置字体 100

3.5 线程(Thread)与定时器(Timer) 102

3.5.1 多线程概述 102

3.5.2 线程的创建 102

3.5.3 线程的休眠和终止 103

3.5.4 线程的优先级 104

3.5.5 游戏线程 104

3.5.6 定时器任务 105

3.5.7 任务的执行和取消 105

3.6 事件处理机制 106

3.6.1 Command事件 107

3.6.2 键盘事件 109

3.6.3 游戏动作 111

3.6.4 触摸屏事件 112

3.7 记录存储系统(RMS) 113

3.7.1 记录存储的概念 113

3.7.2 记录存储的创建 115

3.7.3 记录存储的关闭和删除 116

3.7.4 列举记录存储的名称 116

3.7.5 记录存储的占用空间 117

3.7.6 添加记录 117

3.7.7 记录的删除 117

3.7.8 记录的修改 117

3.7.9 记录的获取 118

3.7.10 记录存储的监听 118

3.7.11 枚举器 119

3.7.12 过滤器 120

3.7.13 比较器 121

3.7.14 记录存储的游戏应用 121

3.8 媒体的播放(MMAPI) 122

3.8.1 MMAPI简介 123

3.8.2 获取终端支持媒体格式 123

3.8.3 Player的创建 124

3.8.4 Player的状态 126

3.8.5 播放单音和声音序列 127

3.8.6 设置音量和播放方式 128

3.8.7 游戏中的声音播放 129

3.8.8 媒体监听接口 129

3.9 本章小结 130

第二篇 基础篇 133

第4章 用点、线、面构造静态多面体 133

4.1 基本框架 133

4.2 构造多面体的顶点缓冲 134

4.2.1 顶点数组(VertexArray) 134

4.2.2 位置数组(PositionArray) 135

4.2.3 法向量数组(NormalArray) 136

4.2.4 颜色数组(ColorArray) 139

4.2.5 纹理数组(TextureArray) 140

4.2.6 顶点缓冲(VertexBuffer) 142

4.3 构造多面体的索引缓冲 145

4.3.1 索引缓冲的使用原理 145

4.3.2 三角带建模原则 145

4.3.3 三角带索引(TriangleStripArray) 146

4.4 多面体的外观属性 148

4.5 颜色融合属性(CompositingMode) 150

4.5.1 构造函数 151

4.5.2 融合模式 151

4.5.3 Alpha门限 153

4.5.4 颜色缓存 153

4.5.5 深度缓存 153

4.5.6 深度检测 155

4.5.7 深度偏移 155

4.6 多边形属性(PolygonMode) 156

4.6.1 构造函数 157

4.6.2 双面拣选模式(Culling) 158

4.6.3 缠绕方式(Winding) 158

4.6.4 着色模式(Shading) 159

4.6.5 透视修正(PerspectiveCorrection) 160

4.6.6 双面光照(TwoSidedLighting) 161

4.6.7 摄影机灯光(LocalCameraLighting) 161

4.7 纹理映射(Texturing) 161

4.7.1 2D图像(Image2D) 162

4.7.2 Texture2D简介 163

4.7.3 创建纹理 165

4.7.4 纹理的重复和钳位 165

4.7.5 纹理滤镜 166

4.7.6 纹理模式 168

4.7.7 纹理的旋转、缩放和平移 170

4.8 材质属性(Material) 171

4.8.1 光的反射原理 172

4.8.2 材质的类型 173

4.8.3 材质的颜色 174

4.8.4 镜面反射的高光属性 175

4.8.5 顶点颜色跟踪 175

4.9 雾化属性(Fog) 176

4.9.1 构造函数 178

4.9.2 雾化类型 178

4.9.3 雾化方程 178

4.9.4 雾化颜色 179

4.9.5 雾化实例 179

4.10 网格多面体(Mesh) 180

4.10.1 类方法介绍 180

4.10.2 构造函数 181

4.10.3 查询子面和外观属性 181

4.11 实例:构造四棱锥模型 182

4.11.1 四棱锥的顶点定义 182

4.11.2 顶点缓冲的构造 182

4.11.3 外观属性的构造 185

4.11.4 添加场景元素 186

4.11.5 代码框架 186

4.11.6 程序运行结果 188

4.12 实例:带纹理的宝剑 188

4.12.1 顶点缓冲的构造 188

4.12.2 外观属性的构造 190

4.12.3 场景元素的构造 191

4.12.4 游戏线程 192

4.12.5 改变方位 192

4.13 本章小结 194

第5章 光源和摄影机 195

5.1 光源 195

5.1.1 光源类(Light) 195

5.1.2 数量、颜色和方位 197

5.1.3 强度和衰减 198

5.1.4 环境光(Ambient) 199

5.1.5 平行光(Directional) 200

5.1.6 点光源(Omni) 201

5.1.7 聚光源(Spot) 201

5.2 摄影机理论 202

5.2.1 从3D到2D的变换 203

5.2.2 摄影机空间 203

5.2.3 裁剪空间 204

5.2.4 线性插值 205

5.2.5 透视投影 205

5.2.6 正交投影 209

5.3 摄影机使用 210

5.3.1 摄影机类(Camera) 210

5.3.2 透视投影的实现 211

5.3.3 正交投影的实现 211

5.3.4 编程建议 213

5.4 目标摄影机的实现 213

5.4.1 目标摄影机原理 213

5.4.2 投影矩阵的运算 214

5.4.3 目标摄影机的应用 216

5.5 自由摄影机的实现 218

5.5.1 构造方法 218

5.5.2 键盘事件 219

5.5.3 更新摄影机方位 220

5.5.4 平移摄影机 221

5.5.5 旋转摄影机 221

5.5.6 屏幕显示 224

5.5.7 访问组和摄影机 225

5.5.8 自由摄影机的运用 225

5.6 本章小结 226

第6章 矩阵和线性变换 228

6.1 矩阵的定义和运算 228

6.1.1 矩阵变换类(Transform) 228

6.1.2 点和向量 230

6.1.3 4D齐次坐标 231

6.1.4 单位矩阵 232

6.1.5 转置矩阵 233

6.1.6 行列式 234

6.1.7 逆矩阵 236

6.1.8 矩阵与矩阵的乘法 238

6.1.9 矩阵与向量的乘法 239

6.2 矩阵的变换操作 240

6.2.1 平移(Translate) 241

6.2.2 2D中的旋转 242

6.2.3 3D中绕坐标轴的旋转 243

6.2.4 3D中绕任意轴的旋转 244

6.2.5 3D中绕任意点的旋转 246

6.2.6 四元数表示的旋转(RotateQuat) 246

6.2.7 缩放(Scale) 248

6.2.8 镜像(Reflection) 249

6.2.9 2D中的切变 250

6.2.10 3D中的切变 251

6.2.11 逆变换 253

6.2.12 矩阵和顶点数组的乘法 253

6.3 3D对象的变换 254

6.3.1 可变换对象类(Transformable) 254

6.3.2 平移变换 255

6.3.3 旋转变换 257

6.3.4 缩放变换 258

6.3.5 变换的组合 259

6.3.6 世界坐标系 260

6.3.7 物体坐标系 260

6.3.8 不同坐标系里的变换 261

6.4 本章小结 264

第7章 3D场景的渲染 265

7.1 场景树的构建 265

7.1.1 抽象3D物体Object3D 265

7.1.2 节点(Node) 268

7.1.3 节点组(Group) 270

7.1.4 世界节点(World) 271

7.1.5 实例:立方体组的管理 273

7.2 对齐技术的使用 276

7.2.1 公告牌(Billboard)技术 276

7.2.2 场景中树木的实现 277

7.2.3 Align实现的目标摄影机(TargetCamera) 285

7.2.4 Align实现的目标聚光灯(TargetLight) 286

7.3 拾取技术的使用 286

7.3.1 拾取概述 286

7.3.2 拾取光束(RayIntersection) 287

7.3.3 Camera视线拾取 289

7.3.4 实例:拾取立方体 289

7.3.5 碰撞检测 292

7.4 场景绘制(Graphics3D) 292

7.4.1 Graphics3D类的使用 292

7.4.2 图形优化建议 294

7.4.3 绘制和管理场景元素 296

7.4.4 设备的3D属性 296

7.4.5 背景(Background) 298

7.4.6 实例:滚动背景 300

7.4.7 3D精灵类(Sprite3D) 303

7.4.8 移动的精灵对象 305

7.5 本章小结 307

第8章 保留模式构造3D场景 308

8.1 加载M3G文件 308

8.1.1 Loader类加载数据 308

8.1.2 分离模型 310

8.1.3 M3G文件导出建议 311

8.1.4 实例:遍历场景 312

8.2 解析场景树 315

8.2.1 加载M3G文件 315

8.2.2 解析场景 316

8.2.3 解析节点 316

8.2.4 解析组节点的变换矩阵 317

8.2.5 解析顶点缓冲 317

8.2.6 解析材质属性 318

8.2.7 判断根节点 319

8.3 3ds max 9.0构建场景 321

8.3.1 创建茶壶模型 321

8.3.2 摄影机和灯光 322

8.3.3 材质与纹理 325

8.3.4 场景背景 328

8.3.5 导出场景 328

8.3.6 运行程序 331

8.3.7 调整坐标系 332

8.4 Maya7.0构建场景 333

8.4.1 菜单 333

8.4.2 视图 334

8.4.3 隐藏界面元素 335

8.4.4 视图操作 335

8.4.5 平移、旋转和缩放 336

8.4.6 创建模型 336

8.4.7 材质与纹理 338

8.4.8 灯光与摄影机 341

8.4.9 导出场景 342

8.5 Blender 2.4构建场景 345

8.5.1 Blender用户界面简介 345

8.5.2 打开和保存文件 346

8.5.3 选择模型 347

8.5.4 平移、旋转和缩放 347

8.5.5 拆分窗口 348

8.5.6 切换视图 349

8.5.7 工具盒 349

8.5.8 快捷按钮 350

8.5.9 用户参数设置 350

8.5.10 创建模型 351

8.5.11 灯光与摄影机 352

8.5.12 材质与纹理 353

8.5.13 场景背景 355

8.5.14 导出场景 355

8.6 浏览M3G文件 356

8.6.1 JSR-184 Player浏览场景 356

8.6.2 M3GToolkit 0.5.0浏览场景树 357

8.6.3 M3GToolkit 4.0浏览场景 358

8.6.4 显示模式 359

8.6.5 摄影机 360

8.6.6 场景树 361

8.6.7 播放动画 361

8.6.8 自定义灯光 362

8.7 本章小结 362

第9章 3D动画制作 363

9.1 动画概述 363

9.1.1 关键帧动画 363

9.1.2 骨骼蒙皮动画 364

9.1.3 变形物体动画 364

9.1.4 3D动画实现机制及原理 364

9.2 关键帧序列(KeyframeSequence) 365

9.2.1 插值算法 366

9.2.2 线性插值(LINEAR) 366

9.2.3 四元数插值(SLERP) 367

9.2.4 单步插值 368

9.2.5 设置关键帧 368

9.2.6 帧重复模式 368

9.2.7 设置有效帧 369

9.2.8 设置持续时间 369

9.3 动画轨迹(AnimationTrack) 370

9.3.1 动画特性 370

9.3.2 动画轨迹的构造 371

9.3.3 绑定动画控制器 372

9.4 动画控制器(AnimationController) 372

9.4.1 活动间隔和权重 373

9.4.2 序列时间和世界时间 374

9.4.3 动画播放 375

9.4.4 实例:滚动的立方体 376

9.4.5 实例:游动的轮船 380

9.4.6 保留模式下的动画播放 385

9.5 变形多面体动画 387

9.5.1 顶点变形多面体(MorphingMesh) 387

9.5.2 实例:变形的三角柱 390

9.5.3 实例:活动的手指 392

9.5.4 实例:关键帧动画控制权重 398

9.5.5 骨骼变形多面体(SkinnedMesh) 405

9.5.6 实例:活动的关节 406

9.5.7 实例:关键帧动画控制骨骼旋转角度 410

9.6 本章小结 416

第三篇 实战篇 419

第10章 3D开发相关技术 419

10.1 基本地形渲染技术 419

10.1.1 HeightMap简介 419

10.1.2 海岛地图的原理 421

10.1.3 地图元素图元 422

10.1.4 读取元素数据 422

10.1.5 构造四边形图元 423

10.1.6 根据地图构造四边形组 425

10.1.7 构造游戏场景 426

10.1.8 绘制场景 427

10.1.9 键盘输入 427

10.1.10 地图纹理的应用 429

10.1.11 摄影机游历场景图 430

10.2 粒子系统技术 431

10.2.1 粒子系统简介 432

10.2.2 粒子系统应用 432

10.2.3 粒子系统属性 432

10.2.4 粒子系统模型 433

10.2.5 焰火粒子系统 433

10.2.6 爆炸粒子系统 440

10.3 碰撞检测技术 443

10.3.1 碰撞检测技术简介 443

10.3.2 球体碰撞检测 444

10.3.3 AABB立方体边界框检测 446

10.3.4 OBB树碰撞检测 455

10.3.5 碰撞反应 457

10.4 本章小结 457

第11章 3D迷宫游戏设计与实现 458

11.1 迷宫游戏的策划和准备工作 458

11.1.1 3D游戏开发概述 458

11.1.2 游戏的策划 459

11.1.3 游戏的准备工作 460

11.2 迷宫游戏的架构 460

11.2.1 游戏线程 460

11.2.2 游戏的类结构 461

11.2.3 游戏的场景架构 462

11.2.4 游戏的流程 462

11.2.5 深度优先算法生成迷宫 464

11.3 迷宫游戏的实现 467

11.3.1 主类Maze3DMIDlet类 467

11.3.2 菜单列表MenuList类的实现 469

11.3.3 平面Plane类的实现 471

11.3.4 迷宫地图Maze类的实现 473

11.3.5 设备属性Graphics3Dproperties类的实现 481

11.3.6 错误处理ErrorScreen类的实现 481

11.4 游戏画布MazeCanvas类的实现 482

11.4.1 变量和构造函数 482

11.4.2 创建开始标志 483

11.4.3 创建结束标志 485

11.4.4 创建定位标志 486

11.4.5 创建迷宫的墙壁 487

11.4.6 创建地板 488

11.4.7 初始化游戏场景 489

11.4.8 游戏的视角切换 490

11.4.9 半透明的墙壁 491

11.4.10 游戏线程 492

11.4.11 绘制3D场景 494

11.4.12 绘制2D图像 495

11.4.13 玩家的移动 495

11.4.14 判断玩家能否移动 498

11.4.15 显示菜单 499

11.5 迷宫游戏的改善 499

11.6 本章小结 500

第12章 第一人称射击游戏(FPS)的设计与实现 501

12.1 第一人称射击游戏的策划和准备工作 501

12.1.1 第一人称射击游戏概述 501

12.1.2 第一人称射击游戏的人工智能 502

12.1.3 游戏的策划 503

12.1.4 游戏的资源 504

12.2 游戏画布的实现 504

12.2.1 创建场景 504

12.2.2 键盘事件处理 506

12.2.3 刷新绘制 507

12.3 玩家视角的实现 509

12.3.1 带纹理的平面类 509

12.3.2 移动摄影机的实现 511

12.3.3 键盘事件处理 512

12.3.4 位置的更新 513

12.3.5 获取摄影机的当前方位 514

12.4 加载敌人人物角色 515

12.4.1 匪徒信息 515

12.4.2 匪徒1的加载 516

12.4.3 匪徒2的加载 517

12.5 爆炸和射击 519

12.5.1 爆炸动画的实现 519

12.5.2 射击状态的控制 522

12.5.3 爆炸声音的播放 526

12.6 本章小结 528

第四篇 Mascot Capsule篇 533

第13章 Mascot Capsule技术入门 533

13.1 创建和绘制3D模型 533

13.1.1 Mascot Capsule概述 533

13.1.2 绘制立方体实例 535

13.1.3 绘制指令和指令列表 538

13.1.4 图元类型与顶点坐标 539

13.1.5 法向量坐标 539

13.1.6 纹理坐标 540

13.1.7 颜色数据 541

13.1.8 绘制层与摄影机 548

13.1.9 纹理的使用和纹理动画 550

13.1.10 颜色融合方式 556

13.1.11 环境光与平行光 559

13.2 3D变换和运算函数 560

13.2.1 Vector3D类实现的3D向量 560

13.2.2 AffineTrans类实现的仿射变换 563

13.2.3 Util3D类实现的正余弦函数 568

13.2.4 Util3D类实现的方根运算 574

13.3 透明纹理精灵实现的烟雾效果 576

13.3.1 MIDlet程序入口 576

13.3.2 抽象投影属性的V3Object基类 577

13.3.3 墙壁与地板抽象的平面类(Plane) 578

13.3.4 计算帧速度的FPS类 582

13.3.5 继承V3Object的Smoke烟雾类 583

13.3.6 绘制场景游戏画布SmokeCanvas 586

13.4 本章小结 590

第14章 保留模式下的Mascot Capsule开发 591

14.1 保留模式下的文件制作和浏览 591

14.1.1 PAC1.3编辑BAC和TRA文件 591

14.1.2 M3DConv3.8制作MBAC和MTRA文件 594

14.1.3 PVMicro3.5.2浏览MBAC和MTRA文件 595

14.1.4 H3T文件和M3G文件的转换 599

14.2 实例:动画机器人 601

14.2.1 Micro3DMIDlet主类 601

14.2.2 游戏画布流程 602

14.2.3 加载游戏资源 603

14.2.4 启动线程 604

14.2.5 键盘事件 606

14.2.6 切换动画模式 607

14.2.7 释放游戏资源 609

14.3 实例:跳舞的男孩 610

14.3.1 主类程序入口 610

14.3.2 画布工作流程 611

14.3.3 初始化场景 611

14.3.4 游戏线程 613

14.3.5 释放游戏资源 614

14.4 实例:旋转的飞机 614

14.4.1 加载游戏资源 615

14.4.2 游戏循环 616

14.5 本章小结 618