出版时间:2012-5 出版社:人民邮电出版社 作者:吴亚峰 页数:749
Tag标签:无
内容概要
随着智能手机移动嵌入式平台硬件性能的不断提升,3D游戏应用也逐渐普及开来。《Android
3D游戏开发技术宝典:OpenGL ES
2.0》结合作者多年从事3D游戏应用开发的宝贵经验,全面介绍了与Android平台相关的必知必会的基础知识及大型完整3D案例,讲解上由浅入深,循序渐进,起点低、终点高,既适合初学者学习,也适合有一定基础的读者进一步提升之用。另外,由于OpenGL
ES 2.0的着色语言通用于各种移动嵌入式平台,因此,《Android 3D游戏开发技术宝典:OpenGL ES
2.0》中与着色器开发相关的60%左右的内容还可供iPhone、Windows
Mobile、MeeGoo等平台的开发人员参考。
全书共22章,其中第1章与第2章为Android平台相关的一些基础知识;第3章~第10章介绍了基于OpenGL ES
2.0进行3D应用开发的一些必知必会的基本知识;第11章~第15章介绍了一些高级特效的实现方法;第16章~第17章介绍了3D游戏开发中相关的一些物理、碰撞检测知识以及常用的3D物理引擎JBullet;第19章介绍了3种人机交互的高级技术;第20章~第22章给出了3个完整的大型3D游戏案例,总代码量接近6万行。同时为了便于读者的学习,《Android
3D游戏开发技术宝典:OpenGL ES
2.0》附赠的光盘中包含了书中所有案例的完整源代码,同时给出了最后3个完整大型3D游戏案例的讲解视频,最大限度地帮助读者快速掌握相应的开发技术。
《Android 3D游戏开发技术宝典:OpenGL ES
2.0》适合Android程序员、游戏开发者及Android爱好者学习,也可以作为相关培训学校和大专院校相关专业的教学用书。
作者简介
吴亚峰,毕业于北京邮电大学,后留学澳大利亚卧龙岗大学取得硕士学位。1998年开始从事Java应用的开发,有10多年的.1ava开发与培训经验。主要的研究方向为OpenGLES、手机游戏、Java EE以及搜索引擎。同时为手机游戏、Java EE独立软件开发工程师,并兼任百纳科技Java培训中心首席培训师。近十年来为数十家著名企业培养了上千名高级软件开发人员,曾编写过《JavaSE 6.0编程指南》、《菜鸟成长之路——Java程序员职场全攻略》、《Android 2.0游戏开发实战宝典》、《Android核心技术与实例详解》、《Android应用案例开发大全》、《Android游戏开发大全》、《Android应用开发完全自学手册——核心技术、传感器、2D/3D、多媒体与典型案例》等多本畅销技术书籍。2008年年初开始关注Android平台下的应用开发,并开发出一系列优秀的Android应用程序与游戏。
书籍目录
第1章 新一代的王者--Android概览
1.1 智能手机市场现状
1.1.1 五大智能手机操作系统
1.1.2 智能手机市场的新星
1.2 Android平台的特点及未来的趋势
1.2.1 全新理念带来的体验风暴
1.2.2 中国手机市场的主导性作用
1.2.3 手机3D游戏和应用增长迅速
1.3 如何搭建Android开发环境
1.3.1 SDK的安装及环境配置
1.3.2 Eclipse集成开发环境的搭建
1.3.3 创建并启动模拟器
1.4 Hello Android应用程序的开发
1.4.1 第一个Android应用程序
1.4.2 Android应用程序的项目结构
1.4.3 Android应用程序的调试
1.4.4 实际设备的联机调试
1.5 Android应用程序运行的机制
1.5.1 应用程序的系统架构
1.5.2 应用程序框架
1.5.3 Android运行时
1.5.4 系统库
1.5.5 底层Linux内核
1.6 本章小结
第2章 游戏开发相关Android基础知识
2.1 游戏中的音效
2.1.1 游戏中的即时音效
2.1.2 即时音效的一个案例
2.1.3 背景音乐播放技术
2.1.4 简易音乐播放器的实现
2.2 简单数据的存储--Preferences
2.2.1 Preferences简介
2.2.2 Preferences实现访问时间的记录
2.3 手机自带数据库--SQLite
2.3.1 初识SQLite
2.3.2 SQLite数据库的基本操作
2.3.3 SQLite数据库的简单案例
2.3.4 使用ContentProvider组件共享数据
2.3.5 使用ContentResolver获取分享数据
2.4 文件I/O
2.4.1 访问SD卡中的文件
2.4.2 访问手机中的文件夹
2.4.3 读取assets文件夹下的内容
2.5 2D动画的开发
2.5.1 SurfaceView用法简介
2.5.2 使用SurfaceView实现2D动画
2.6 Socket网络通信
2.6.1 Socket开发基本知识
2.6.2 服务器端
2.6.3 客户端
2.7 蓝牙通信
2.7.1 蓝牙通信的基本知识
2.7.2 聊天案例概览
2.7.3 聊天案例的开发过程
2.8 本章小结
第3章 初识OpenGL ES 2.
3.1 OpenGL ES 2.0概览
3.1.1 OpenGL ES 2.0简介
3.1.2 初识OpenGL ES 2.0应用程序
3.2 着色器与渲染管线
3.2.1 OpenGL ES 1.x的渲染管线
3.2.2 OpenGL ES 2.0的渲染管线
3.2.3 OpenGL ES中立体物体的构建
3.3 主流Android手机GPU大PK
3.3.1 手机GPU四大家族对比
3.3.2 主流GPU的性能参数比较
3.4 本章小结
第4章 着色语言Shading Language
4.1 着色语言概述
4.2 着色语言基础
4.2.1 数据类型概述
4.2.2 数据类型的基本使用
4.2.3 运算符
4.2.4 类型转换
4.2.5 限定符
4.2.6 流程控制
4.2.7 函数的声明与使用
4.2.8 片元着色器中浮点变量精度的指定
4.2.9 程序的基本结构
4.3 特殊的内建变量
4.3.1 顶点着色器中的内建变量
4.3.2 片元着色器中的内建变量
4.4 着色语言的内置函数
4.4.1 角度转换与三角函数
4.4.2 指数函数
4.4.3 常见函数
4.4.4 几何函数
4.4.5 矩阵函数
4.4.6 向量关系函数
4.4.7 纹理采样函数
4.4.8 微分函数
4.5 本章小结
第5章 投影及各种变换
5.1 摄像机的设置
5.2 两种投影方式
5.2.1 正交投影
5.2.2 透视投影
5.3 各种变换
5.3.1 基本变换的相关数学知识
5.3.2 平移变换
5.3.3 旋转变换
5.3.4 缩放变换
5.3.5 基本变换的实质
5.4 绘制方式
5.4.1 各种绘制方式概览
5.4.2 点与线段绘制方式
5.4.3 三角形条带与扇面绘制方式
5.4.4 顶点法与索引法
5.5 设置合理的视角
5.6 卷绕和背面剪裁
5.6.1 基本知识
5.6.2 一个简单的案例
5.7 本章小结
第6章 光照
6.1 曲面物体的构建
6.1.1 球体构建的基本原理
6.2.2 案例效果概览
6.2.3 开发步骤
6.2 基本光照效果
6.2.1 光照的基本模型
6.2.2 环境光
6.2.3 散射光
6.2.4 镜面光
6.2.5 三种光照通道的合成
6.3 定位光与定向光
6.4 点法向量和面法向量
6.5 光照的每顶点计算与每片元计算
6.6 本章小结
第7章 纹理映射
7.1 初识纹理映射
7.1.1 基本原理
7.1.2 纹理映射的简单案例
7.2 纹理拉伸
7.2.1 两种拉伸方式概览
7.2.2 不同拉伸方式的案例
7.3 纹理采样
7.3.1 纹理采样概述
7.3.2 最近点采样
7.3.3 线性纹理采样
7.3.4 MIN与MAG采样
7.3.5 不同纹理采样方式的案例
7.4 mipmap纹理技术
7.5 多重纹理与过程纹理
7.5.1 案例概览
7.5.2 将2D纹理映射到球面上的策略
7.5.3 案例的场景结构
7.5.4 开发过程
7.6 本章小结
第8章 3D基本形状的构建
8.1 圆柱体
8.1.1 顶点原始位置的生成
8.1.2 案例的开发
8.2 圆锥体
8.2.1 顶点原始位置的生成
8.2.2 案例的开发
8.3 圆环体
8.3.1 顶点原始位置的生成
8.3.2 案例的开发
8.4 螺旋管
8.4.1 顶点原始位置的生成
8.4.2 案例的开发
8.5 几何球
8.5.1 顶点原始位置的生成
8.5.2 案例的开发
8.6 足球碳分子模型的搭建
8.6.1 搭建的基本原理
8.6.2 案例的开发
8.7 贝塞尔曲线及旋转面
8.7.1 三维旋转曲面的生成
8.7.2 贝塞尔曲线
8.7.3 Bezier曲线生成工具
8.7.4 印度古典建筑场景的开发
8.8 本章小结
第9章 3D模型加载
9.1 obj模型文件概览
9.1.1 obj文件的格式
9.1.2 用3DMax设计3D模型
9.2 加载obj文件
9.2.1 加载仅有顶点坐标与面数据的obj文件
9.2.2 加载后自动计算面法向量
9.2.3 加载后自动计算平均法向量
9.2.4 加载纹理坐标
9.3 本章小结
第10章 混合与雾
10.1 混合技术
10.1.1 混合基本知识
10.1.2 源因子和目标因子
10.1.3 简单混合效果案例
10.2 地月系云层效果的实现
10.3 雾
10.3.1 雾的原理与优势
10.3.2 雾的简单实现
10.4 本章小结
第11章 常用3D开发技巧
11.1 标志板
11.1.1 案例效果与基本原理
11.1.2 开发步骤
11.2 灰度图地形
11.2.1 基本原理
11.2.2 普通灰度图地形
11.2.3 过程纹理地形
11.2.4 MipMap地形
11.3 天空盒与天空穹
11.3.1 天空盒
11.3.2 天空穹
11.3.3 天空盒与天空穹的使用技巧
11.4 镜像技术
11.4.1 镜像基本原理
11.4.2 基本效果案例
11.4.3 升级效果案例
11.5 动态文本输出
11.5.1 案例效果与基本原理
11.5.2 具体开发步骤
11.6 非真实感绘制
11.6.1 案例效果与基本原理
11.6.2 具体开发步骤
11.7 本章小结
第12章 几种剪裁与测试
12.1 剪裁测试
12.1.1 基本原理与核心代码
12.1.2 一个主次视角的简单案例
12.2 Alpha测试
12.2.1 Alpha测试基本原理
12.2.2 一个椭圆窗口的案例
12.3 模板测试
12.3.1 基本原理
12.3.2 一个简单的案例
12.4 任意剪裁平面
12.4.1 基本原理
12.4.2 茶壶被任意平面剪裁的案例
12.5 本章小结
第13章 顶点着色器的妙用
13.1 飘扬的旗帜
13.1.1 基本原理
13.1.2 开发步骤
13.2 扭动的软糖
13.2.1 基本原理
13.2.2 开发步骤
13.3 风吹椰林场景的开发
13.3.1 椰子树随风摇摆的基本原理
13.3.2 开发步骤
13.4 展翅飞翔的雄鹰
13.4.1 基本原理
13.4.2 开发步骤
13.5 二维扭曲
13.5.1 基本原理
13.5.2 开发步骤
13.6 OpenGL ES 1.x与OpenGL ES 2.0实现方案的对比
13.7 本章小结
第14章 片元着色器的妙用
14.1 程序纹理技术
14.1.1 砖块着色器
14.1.2 沙滩球着色器
14.2 数字图像处理
14.2.1 卷积的基本知识
14.2.2 平滑过滤
14.2.3 边缘检测
14.2.4 锐化处理
14.2.5 浮雕效果
14.2.6 图像渐变
14.3 分形着色器
14.3.1 曼德布罗集简介
14.3.2 曼德布罗集着色器的实现
14.3.3 将曼德布罗集纹理应用到实际物体上
14.3.4 茱莉亚集着色器的实现
14.4 本章小结
第15章 真实光学环境的模拟
15.1 投影贴图
15.1.1 案例效果与基本原理
15.1.2 开发步骤
15.2 反射环境模拟
15.2.1 案例效果与基本原理
15.2.2 开发步骤
15.3 折射环境模拟
15.3.1 案例效果与基本原理
15.3.2 开发步骤
15.4 色散效果的模拟
15.4.1 案例效果与基本原理
15.4.2 开发步骤
15.5 菲涅尔效果的模拟
15.5.1 案例效果与基本原理
15.5.2 开发步骤
15.6 凹凸映射
15.6.1 案例效果与基本原理
15.6.2 法向量纹理图的生成
15.6.3 案例的开发
15.7 平面阴影
15.7.1 案例效果与基本原理
15.7.2 开发步骤
15.8 阴影映射
15.8.1 案例效果与基本原理
15.8.2 距离纹理图的生成
15.8.3 阴影场景的绘制
15.9 光线跟踪
15.9.1 案例效果与基本原理
15.9.2 开发步骤
15.10 本章小结
第16章 游戏开发中的物理学
16.1 碰撞检测基本技术
16.1.1 AABB包围盒的基本原理
16.1.2 AABB包围盒的计算
16.1.3 AABB包围盒的碰撞检测
16.1.4 一个AABB包围盒的案例
16.1.5 旋转后的AABB包围盒
16.1.6 AABB包围盒的使用要点
16.1.7 OBB包围盒
16.2 穿透效应
16.2.1 案例的运行效果与基本原理
16.2.2 具体开发步骤
16.3 粒子系统
16.3.1 案例运行效果与基本原理
16.3.2 CPU版案例的开发
16.3.3 GPU版案例开发步骤
16.4 弹簧质点模型
16.4.1 案例运行效果与基本原理
16.4.2 具体开发步骤
16.5 本章小结
第17章 游戏的心脏--物理引擎
17.1 物理引擎很重要
17.1.1 什么是物理引擎
17.1.2 常见的物理引擎
17.2 JBullet物理引擎
17.2.1 基本的物理学概念
17.2.2 JBullet中常用类的介绍
17.3 箱子相互碰撞的案例
17.3.1 案例运行效果及准备工作
17.3.2 案例的基本框架结构
17.3.3 常量类--Constant
17.3.4 3D场景渲染类--MySurfaceView
17.3.5 水平地面--TexFloor类
17.3.6 箱子--TexCube类
17.4 复合碰撞形状的使用
17.4.1 案例运行效果
17.4.2 立方体圆柱复合形状--CubeCylinder类
17.5 凹凸地形的案例
17.5.1 案例运行效果
17.5.2 地形类--LandForm
17.6 任意形状物体的碰撞
17.6.1 案例运行效果
17.6.2 加载物体类--LoadedObjectVertexNormal
17.6.3 加载物体刚体类--LoadRigidBody
17.7 铰链关节
17.7.1 铰链关节的基本知识
17.7.2 案例的运行效果
17.7.3 铰链关节旋转角速度的计算
17.7.4 3D界面渲染类--MySurfaceView
17.8 滑动关节
17.8.1 滑动关节的基本知识
17.8.2 案例效果图
17.8.3 3D界面渲染类--MySurfaceView
17.9 六自由度关节
17.9.1 六自由度关节的基本知识
17.9.2 案例的运行效果
17.9.3 人偶类--Doll
17.9.4 拾取时采用的点对点关节
17.10 本章小结
第18章 传感器应用的开发
18.1 基本的开发流程
18.2 加速度传感器
18.2.1 加速度传感器简介
18.2.2 案例的开发
18.3 磁场传感器
18.3.1 磁场传感器简介
18.3.2 案例的开发
18.4 光传感器
18.4.1 光传感器简介
18.4.2 案例的开发
18.5 温度传感器
18.5.1 温度传感器简介
18.5.2 案例的开发
18.6 接近传感器
18.6.1 接近传感器简介
18.6.2 案例的开发
18.7 姿态传感器
18.7.1 姿态传感器简介
18.7.2 案例的开发
18.8 本章小结
第19章 游戏开发小贴士
19.1 3D拾取技术
19.1.1 案例效果与基本原理
19.1.2 开发步骤
19.2 多点触控
19.2.1 案例效果与基本原理
19.2.2 开发步骤
19.3 多键监听
19.3.1 案例效果与基本原理
19.3.2 开发步骤
19.4 本章小结
第20章 BN赛艇
20.1 游戏背景及功能概述
20.1.1 背景概述
20.1.2 功能介绍
20.2 游戏的策划及准备工作
20.2.1 游戏的策划
20.2.2 Android平台下游戏的准备工作
20.3 游戏的架构
20.3.1 各个类简要介绍
20.3.2 游戏框架简介
20.4 主控制类MyActivity
20.5 2D界面相关类
20.5.1 欢迎界面类WelcomeView
20.5.2 2D界面父类MySFView
20.5.3 主菜单类MenuView
20.5.4 2D界面绘制类ViewForDraw
20.5.5 数据库工具类DBUtil
20.5.6 Android系统版本对话框AndroidVersionDialog
20.6 选船界面相关类
20.6.1 着色器管理类ShaderManager
20.6.2 围墙类ColorLightRect
20.6.3 选船房间类HouseForDraw
20.6.4 展台类DisplayStation
20.6.5 赛艇类Boat
20.6.6 选船界面XCSurfaceView
20.7 游戏界面相关类
20.7.1 进度条类Process
20.7.2 3D物体父类BNDrawer
20.7.3 3D物体控制类TDObjectForControl
20.7.4 赛艇类Boat
20.7.5 可碰撞物体父类KZBJDrawer
20.7.6 可碰撞物体控制类KZBJForControl
20.7.7 赛艇与可碰撞物体检测碰撞线程ThreadColl
20.7.8 可吃物体父类SpeedForEat
20.7.9 可吃物体控制类SpeedForControl
20.7.10 晶体旋转线程RotateThread
20.7.11 赛艇与晶体碰撞检测线程ThreadForEat
20.7.12 比较两灌木距离摄像机距离类MyComparable
20.7.13 单个灌木类SingleShrub
20.7.14 灌木控制类ShrubForControl
20.7.15 赛艇赛道类RaceTrack
20.7.16 赛艇与桥碰撞检测类PZZ
20.7.17 赛艇运动路线工具类PathUtil
20.7.18 尾浪类WeiLang
20.7.19 水面类Water
20.7.20 游戏界面类MyGLSurfaceView
20.7.21 运动监听线程KeyThread
20.8 该游戏中的着色器
20.9 游戏的优化与改进
第21章 火力篮球
21.1 游戏背景及功能概述
21.1.1 背景概述
21.1.2 功能介绍
21.2 游戏的策划及准备工作
21.2.1 游戏的策划
21.2.2 Android平台下游戏开发的准备工作
21.3 游戏的架构
21.3.1 各个类简要介绍
21.3.2 游戏框架简介
21.4 公共类BasketBall_Shot_Activity
21.5 辅助界面相关类
21.5.1 主菜单界面CaiDanView类
21.5.2 设置界面ShengyinKGJiemian类
21.5.3 关于界面GuanYuView类
21.5.4 记录界面JiLuView类
21.5.5 数据库相关类SQLiteUtil
21.6 游戏界面相关类
21.6.1 游戏界面绘制类GLGameView
21.6.2 着色器程序管理器类ShaderManager
21.6.3 添加刚体进物理世界类TianjiaBody
21.6.4 添加胶囊刚体进物理世界类JiaoNangTianjiaBody
21.6.5 篮球控制类BasketBallForDraw
21.6.6 纹理矩形绘制类WenLiJuXing
21.7 游戏中着色器的开发
21.7.1 纹理的着色器
21.7.2 光照着色器
21.7.3 影子着色器
21.7.4 仪表盘背景着色器
21.7.5 篮网着色器
21.8 游戏的优化与改进
第22章 夜鹰行动
22.1 游戏背景及功能概述
22.1.1 背景概述
22.1.2 功能介绍
22.2 游戏的策划及准备工作
22.2.1 游戏的策划
22.2.2 Android平台下游戏开发的准备工作
22.3 游戏的架构
22.3.1 各个类的简要介绍
22.3.2 游戏框架简介
22.4 公共类Aircraft_Activity
22.5 游戏相关类
22.5.1 游戏界面绘制类GLGameView
22.5.2 游戏线程类KeyThread
22.5.3 子弹类BulletForControl
22.5.4 坦克类TanKe
22.5.5 山地绘制类LandForm
22.5.6 颜色圆面类CircleForDraw
22.5.7 星空类SkyNight
22.5.8 爆炸效果绘制类DrawBomb
22.5.9 数字绘制类NumberForDraw
22.6 该游戏中的着色器
22.6 .1 加载界面着色器
22.6.2 地形着色器
22.6.3 按钮着色器
22.6.4 星空着色器
22.6.5 生命值矩形着色器
22.6.6 颜色圆面着色器
22.7 游戏的优化与改进
章节摘录
版权页: 插图: 由于当下可编程图形硬件占图形硬件市场的份额越来越大,3D开发人员应该具备使用可编程图形硬件的能力,而各种可编程图形硬件一般都是提供着色器供开发人员使用的,因此学习着色语言是开发3D游戏的重中之重。 由于Android平台下的可编程图形硬件支持的是OpenGL ES2.0标准,因此,本章将向读者介_降OpenGL ES着色语言。OpenGL ES着色语言是基于OpenGL ES2.0平台研发的,基本可以看做是PC和工作站上OpenGL着色语言的子集,包含了OpenGL着色语言的大部分功能。 OpenGL ES着色语言是一种高级的图形编程语言,其源自应用广泛的C语言,同时具有RenderMan以及其他着色语言的一些优良特性,易于被开发人员掌握。 与传统通用编程语言有很大不同的是,其提供了更加丰富的原生类型,如向量、矩阵等。这些新特性的加入使得OpenGL ES着色语言在处理3D图形方面更加高效、易用。简单来说,OpenGL ES着色语言主要包括以下特性。 •OpenGL ES着色语言是一种高级的过程语言(注意,不是面向对象)。 •对顶点着色器、片元着色器使用的是同样的语言,不做区分。 •基于C/C++的语法及流程控制。 •完美支持向量与矩阵的各种操作。 •通过类型限定符来管理输入与输出。 •拥有大量的内置函数来提供丰富的功能。 总之,OpenGL ES着色语言是一种易于实现、功能强大、便于使用、完美支持硬件灵活性,且可以高度并行处理、性能优良的高级图形编程语言。其可以帮助开发人员在不浪费大量时间的情况下,轻松地为用户带来更完美的视觉体验,开发出更加酷炫的3D场景与特效。 对于3D游戏开发人员来说,掌握这门语言尤为重要。本章的后继内容将从多个方面介绍OpenGL ES着色语言的基本知识,使得读者初步了解着色语言,为以后深入地学习打下坚实的基础。
编辑推荐
《Android 3D游戏开发技术宝典:OpenGL ES 2.0》适合Android程序员、游戏开发者及Android爱好者学习,也可以作为相关培训学校和大专院校相关专业的教学用书。《Android 3D游戏开发技术宝典:OpenGL ES 2.0》组织上本着“起点低,终点高”的原则,内容覆盖了从学习OpenGL ES 2.0必知必会的基础知识到基于OpenGL ES 2.0实现高级特效,最后还给出了3个完整的大型3D游戏案例。这3个案例均是笔者带领学员参加谷歌(Google)2011第二届Android应用开发中国大学生挑战赛的获奖作品,第22章的夜鹰行动更是获全国总决赛前5名大奖的作品。《Android 3D游戏开发技术宝典:OpenGL ES 2.0》中配合每个需要讲解的知识点都给出了丰富的插图与完整的案例,使得初学者易于上手,有一定基础的读者便于深入。书中所有的案例均是根据笔者多年的开发心得进行设计的,结构清晰明朗,便于读者进行学习。同时书中还给出了很多笔者多年来积累的编程技巧与心得,具有很高的参考价值。
图书封面
图书标签Tags
无
评论、评分、阅读与下载