WebGL 3D开发实战详解 第2版

作者
吴亚峰 于复兴 索依娜
丛书名
出版社
人民邮电出版社
ISBN
9787115519368
简要
简介
内容简介书籍计算机书籍 本书系统地介绍了HTML5的基本知识和新特性、WebGL的基本知识,并引导读者完成了WebGL的基础案例。同时,本书也对在WebGL中,实现可编程渲染管线着色器的语言进行了系统介绍,帮助读者进行着色器的高级开发打下坚实的基础。另外,本书介绍了3D开发的多种投影、变换原理及实现,以及点、线段、三角形三大类的绘制方式。 本书适合程序开发人员、游戏开发人员和虚拟现实开发者阅读,也可作为大专院校相关专业师生的学习用书,以及培训学校的教材。
目录



目 录











第 1章 HTML5开发基础——进入


WebGL 世界的第 一道坎\t1


1.1 HTML的发展简史\t1


1.1.1 HTML的由来\t1


1.1.2 HTML的历史\t1


1.2 HTML5简介\t2


1.2.1 HTML5的新标准\t2


1.2.2 HTML5引入的新特性\t3


1.2.3 HTML5现状\t3


1.3 初识HTML5\t4


1.3.1 HTML5标签简介\t4


1.3.2 基础标签\t4


1.3.3 格式标签\t6


1.3.4 表单标签\t11


1.3.5 图像、链接、列表标签\t18


1.3.6 表格、元信息等标签\t21


1.3.7 HTML5中的全局属性\t26


1.3.8 HTML5中的事件\t30


1.4 初识CSS\t32


1.4.1 CSS简介\t32


1.4.2 CSS基础语法\t33


1.4.3 如何插入样式表\t34


1.4.4 使用CSS样式\t35


1.5 初识JavaScript\t42


1.5.1 JavaScript的名字和版本\t42


1.5.2 准备使用JavaScript\t42


1.5.3 使用语句\t43


1.5.4 使用变量和类型\t43


1.5.5 JavaScript运算符\t45


1.5.6 使用数组\t45


1.5.7 创建自己的JavaScript


对象\t46


1.5.8 常用的JavaScript工具\t48


1.6 HTML5 Canvas简介\t49


1.6.1 文档对象模型和Canvas\t49


1.6.2 JavaScript与Canvas\t49


1.6.3 HTML5 Canvas版


“Hello World”\t50


1.6.4 Canvas中的基础图形\t52


1.7 本章小结\t53


第 2章 初识WebGL 2.0\t54


2.1 WebGL 2.0概述\t54


2.1.1 WebGL 2.0简介\t54


2.1.2 WebGL 2.0效果展示\t55


2.2 初识WebGL 2.0应用\t55


2.2.1 WebGL 2.0应用案例部署


运行步骤简介\t56


2.2.2 初识WebGL 2.0应用


程序\t57


2.3 着色器与渲染管线\t62


2.3.1 WebGL 2.0的渲染管线\t62


2.3.2 WebGL 2.0中立体物体的


构建\t68


2.4 本章小结\t69


第3章 着色语言\t70


3.1 着色语言概述\t70


3.2 着色语言基础\t71


3.2.1 数据类型概述\t71


3.2.2 数据类型的基本使用\t75


3.2.3 运算符\t77


3.2.4 构造函数\t79


3.2.5 类型转换\t80


3.2. 6 限定符\t81


3.2.7 插值限定符\t85


3.2.8 一致块\t86


3.2.9 layout 限定符\t87


3.2.10 流程控制\t88


3.2.11 函数的声明与使用\t90


3.2.12 片元着色器中浮点变量


精度的指定\t91


3.2.13 程序的基本结构\t92


3.3 特殊的内建变量\t92


3.3.1 顶点着色器中的内建


变量\t92


3.3.2 片元着色器中的内建


变量\t93


3.3.3 内建常量\t94


3.3.4 内建uniform变量\t94


3.4 着色语言的内置函数\t95


3.4.1 角度转换与三角函数\t95


3.4.2 指数函数\t96


3.4.3 常见函数\t97


3.4.4 几何函数\t100


3.4.5 矩阵函数\t101


3.4.6 向量关系函数\t102


3.4.7 纹理采样函数\t103


3.4.8 微分函数\t106


3.4.9 浮点数的打包与解包


函数\t106


3.5 用invariant修饰符避免值变


问题\t107


3.6 预处理器\t108


3.7 本章小结\t109


第4章 必知必会的3D开发知识——


投影及各种变换\t110


4.1 矩阵数学计算工具脚本Matrix\t110


4.2 摄像机的设置\t111


4.3 两种投影方式\t112


4.3.1 正交投影\t112


4.3.2 透视投影\t117


4.4 各种变换\t119


4.4.1 基本变换的数学知识\t119


4.4.2 平移变换\t120


4.4.3 旋转变换\t121


4.4.4 缩放变换\t123


4.4.5 基本变换的实质\t124


4.5 所有变换的完整流程\t126


4.6 绘制方式\t129


4.6.1 几种绘制方式概述\t129


4.6.2 点与线段绘制方式\t130


4.6.3 三角形条带与扇面绘制


方式\t132


4.7 设置合理的视角\t136


4.8 卷绕和背面剪裁\t141


4.8.1 基本知识\t141


4.8.2 简单的案例\t142


4.9 本章小结\t144


第5章 光照效果\t145


5.1 曲面物体的构建\t145


5.1.1 球体的构建原理\t145


5.1.2 案例效果概述\t146


5.1.3 具体开发步骤\t147


5.2 基本光照效果\t149


5.2.1 光照的基本模型\t149


5.2.2 环境光\t149


5.2.3 散射光\t151


5.2.4 镜面光\t156


5.2.5 3种光照通道的合成\t159


5.3 定位光与定向光\t161


5.4 点法向量和面法向量\t163


5.5 光照的每顶点计算与每片元


计算\t165


5.6 本章小结\t168


第6章 纹理映射\t169


6.1 初识纹理映射\t169


6.1.1 基本原理\t169


6.1.2 简单的案例\t170


6.2 纹理拉伸\t175


6.2.1 两种拉伸方式概述\t175


6.2.2 不同拉伸方式的案例\t177


6.3 纹理采样\t179


6.3.1 纹理采样概述\t179


6.3.2 最近点采样\t179


6.3.3 线性纹理采样\t180


6.3.4 MIN与MAG采样\t181


6.3.5 不同纹理采样方式的


案例\t182


6.4 MipMap纹理技术\t184


6.4.1 基本原理\t184


6.4.2 简单的案例\t186


6.5 多重纹理与过程纹理\t188


6.5.1 案例概述\t188


6.5.2 将2D纹理映射到球面上的


策略\t189


6.5.3 案例的场景结构\t191


6.5.4 开发过程\t191


6.6 压缩纹理的使用\t193


6.6.1 ETC压缩纹理\t194


6.6.2 DXT5\t196


6.7 本章小结\t197


第7章 3D模型加载\t198


7.1 obj模型文件概述\t198


7.1.1 obj文件的格式\t198


7.1.2 用3ds Max设计3D


模型\t199


7.2 加载obj文件\t200


7.2.1 加载仅有顶点坐标与面


数据的obj文件\t200


7.2.2 加载后自动计算面法


向量\t203


7.2.3 加载后自动计算平均法


向量\t205


7.2.4 加载纹理坐标\t207


7.2.5 加载顶点法向量\t209


7.3 双面光照\t210


7.4 本章小结\t212


第8章 混合与雾\t213


8.1 混合技术\t213


8.1.1 混合基本知识\t213


8.1.2 源因子和目标因子\t214


8.1.3 简单混合效果的案例\t215


8.2 地月系云层效果的实现\t217


8.3 雾\t219


8.3.1 雾的原理与优势\t219


8.3.2 雾的简单实现\t220


8.4 本章小结\t222


第9章 常用3D开发技巧\t223


9.1 标志板\t223


9.1.1 案例效果与基本原理\t223


9.1.2 开发步骤\t224


9.2 灰度图地形\t227


9.2.1 基本原理\t228


9.2.2 普通灰度图地形\t228


9.2.3 过程纹理地形\t231


9.2.4 MipMap地形\t233


9.3 高真实感地形\t234


9.3.1 基本思路\t234


9.3.2 地形设计工具EarthSculptor


的使用\t235


9.3.3 简单的案例\t237


9.4 天空盒与天空穹\t239


9.4.1 天空盒\t239


9.4.2 天空穹\t241


9.4.3 天空盒与天空穹的使用


技巧\t243


9.5 简单镜像\t243


9.5.1 镜像基本原理\t243


9.5.2 基本效果案例\t244


9.5.3 升级效果的案例\t246


9.6 非真实感绘制\t247


9.6.1 基本原理与案例效果\t247


9.6.2 具体开发步骤\t249


9.7 描边效果的实现\t250


9.7.1 沿法线挤出轮廓\t251


9.7.2 在视空间中挤出\t253


9.8 本章小结\t254


第 10章 渲染出更加酷炫的3D场景——


几种剪裁与测试\t255


10.1 剪裁测试\t255


10.1.1 基本原理与核心代码\t255


10.1.2 主次视角的简单案例\t255


10.2 模板测试\t257


10.2.1 基本原理\t257


10.2.2 简单的案例\t259


10.3 任意剪裁平面\t260


10.3.1 基本原理\t260


10.3.2 茶壶被任意平面剪裁的


案例\t260


10.4 本章小结\t262


第 11章 Three.js引擎基础\t263


11.1 Three.js概述\t263


11.1.1 Three.js简介\t263


11.1.2 Three.js效果展示\t264


11.2 初识Three.js应用\t264


11.3 Three.js基本组件\t266


11.3.1 场景\t266


11.3.2 几何对象\t268


11.3.3 摄像机\t270


11.3.4 摄像机数组\t274


11.3.5 光源\t275


11.3.6 材质\t283


11.4 模型加载\t291


11.4.1 Three.js中支持的模型


文件格式\t291


11.4.2 导入三维格式文件\t296


11.4.3 骨骼动画的加载\t300


11.5 贴图的使用\t306


11.6 本章小结\t316


第 12章 Three.js引擎进阶\t317


12.1 粒子系统\t317


12.1.1 Sprite粒子系统\t317


12.1.2 PointCloud粒子系统\t319


12.1.3 火焰粒子特效\t321


12.2 混合与雾\t325


12.2.1 混合\t325


12.2.2 雾\t328


12.3 渲染到纹理\t329


12.3.1 效果组合器\t329


12.3.2 FilmPass通道\t330


12.3.3 BloomPass通道\t331


12.3.4 DotScreenPass通道\t332


12.3.5 SSAOPass通道\t333


12.3.6 ShaderPass通道\t334


12.4 音频的处理与展示\t336


12.4.1 声音可视化\t336


12.4.2 声音与距离\t338


12.5 杂项\t340


12.5.1 任意剪裁平面\t340


12.5.2 单个物体的多个实例\t341


12.5.3 高真实感的水面\t343


12.6 本章小结\t346


第 13章 Babylon.js引擎\t347


13.1 Babylon.js概述\t347


13.1.1 Babylon.js简介\t347


13.1.2 Babylon.js效果展示\t348


13.2 初识Babylon.js应用\t348


13.3 Babylon.js基本组件\t350


13.3.1 场景\t350


13.3.2 网格对象\t352


13.3.3 摄像机与控制\t354


13.3.4 光照与阴影\t359


13.3.5 材质\t363


13.4 模型加载\t368


13.4.1 Babylon.js中支持的模型


文件格式\t368


13.4.2 资源管理器的使用\t373


13.4.3 导入三维格式文件\t374


13.5 纹理贴图\t377


13.5.1 使用纹理贴图\t377


13.5.2 使用法向贴图\t379


13.5.3 使用光照贴图制作静态


阴影\t380


13.5.4 使用高光贴图\t381


13.6 粒子系统\t382


13.6.1 精灵与精灵动画\t383


13.6.2 粒子与粒子系统\t385


13.6.3 粒子发射器\t387


13.6.4 粒子动画\t389


13.6.5 GPU粒子\t389


13.6.6 固体颗粒系统\t390


13.7 物理引擎\t391


13.7.1 Babylon.js中支持的物理


引擎插件\t392


13.7.2 刚体的简单介绍\t392


13.7.3 简单的物理场景\t393


13.7.4 爆炸效果实现\t394


13.7.5 碰撞回调函数\t396


13.7.6 为导入模型添加碰撞


效果\t396


13.7.7 关节的简介\t398


13.7.8 单摆运动的小球\t399


13.7.9 布料模拟\t399


13.8 渲染到纹理\t401


13.8.1 SSAO渲染效果的


实现\t401


13.8.2 Bloom渲染效果的


实现\t404


13.8.3 颗粒渲染效果的实现\t405


13.8.4 色差渲染效果的实现\t405


13.8.5 景深渲染效果的实现\t406


13.9 本章小结\t407


第 14章 Ammo物理引擎\t408


14.1 Ammo物理引擎简介\t408


14.2 Ammo中的常用类\t408


14.2.1 btVector3类——三维


向量类\t409


14.2.2 btTransform类——


变换类\t409


14.2.3 btRigidBody类——


刚体类\t410


14.2.4 btDynamicsWorld类——


物理世界类\t410


14.2.5 btDiscreteDynamicsWorld类


——离散物理世界类\t411


14.2.6 btSoftRigidDynamicsWorld


类——支持模拟软体的物理


世界类\t411


14.2.7 btCollisionShape类——


碰撞形状类\t412


14.2.8 btStaticPlaneShape类——


静态平面形状\t412


14.2.9 btSphereShape类——


球体形状类\t412


14.2.10 btBoxShape类——长方体


盒碰撞形状类\t412


14.2.11 btCylinderShape类——


圆柱形状类\t413


14.2.12 btCapsuleShape类——


胶囊形状类\t413


14.2.13 btConeShape类——


圆锥形状类\t413


14.2.14 btCompoundShape类——


复合碰撞形状类\t413


14.3 简单的物理场景\t414


14.3.1 案例运行效果\t414


14.3.2 案例的基本结构\t414


14.3.3 介绍主要方法\t415


14.4 多种形状刚体的碰撞\t417


14.4.1 案例运行效果\t417


14.4.2 案例开发过程\t418


14.5 旋转的陀螺\t419


14.5.1 案例运行效果\t419


14.5.2 案例开发过程\t419


14.6 触发器——消失的木块\t420


14.6.1 案例运行效果\t421


14.6.2 案例开发过程\t421


14.7 碰撞过滤——物体碰撞下落\t422


14.7.1 案例运行效果\t422


14.7.2 案例开发过程\t423


14.8 关节\t424


14.8.1 关节的父类——


btTypedConstraint类\t424


14.8.2 铰链关节——


btHingeConstraint类\t424


14.8.3 铰链关节的案例——球落


门开\t425


14.8.4 齿轮关节——


btGearConstraint类\t427


14.8.5 齿轮关节的案例——


转动的齿轮\t427


14.8.6 点对点关节——


btPoint2PointConstraint


类\t429


14.8.7 点对点关节的案例——


悬挂的物体\t430


14.8.8 滑动关节——


btSliderConstraint类\t432


14.8.9 滑动关节的案例——6个方


向的物体滑动\t432


14.8.10 六自由度关节——


btGeneric6DofConstraint


类\t434


14.8.11 六自由度关节的案例——


掉落的蜘蛛\t435


14.9 交通工具类的介绍\t438


14.9.1 交通工具类——


btRaycastVehicle类\t438


14.9.2 交通工具的案例——


移动的小车\t439


14.10 软体\t443


14.10.1 软体帮助类——


btSoftBodyHelps类\t443


14.10.2 软布案例\t444


14.10.3 三角形网格软体案例\t446


14.10.4 绳索软体案例\t448


14.11 本章小结\t450


第 15章 在线3D模型交互式编辑


系统\t451


15.1 背景以及功能概述\t451


15.1.1 开发背景概述\t451


15.1.2 系统功能简介\t452


15.2 系统的策划及准备工作\t455


15.2.1 系统策划\t455


15.2.2 数据库设计\t456


15.3 系统架构\t457


15.3.1 各个类的简介\t457


15.3.2 系统架构简介\t459


15.4 服务器端相关类\t460


15.5 模型编辑页面文件\t464


15.6 管理脚本\t470


15.6.1 矩阵管理脚本\t470


15.6.2 材质管理脚本\t474


15.7 工具脚本\t478


15.7.1 颜色拾取脚本\t478


15.7.2 摄像机旋转脚本\t480


15.7.3 添加监听脚本\t482


15.8 模型导出脚本\t486


15.8.1 obj文件导出脚本\t486


15.8.2 stl文件导出脚本\t489


15.9 辅助工具脚本\t491


15.9.1 初始化相关脚本\t491


15.9.2 监听相关脚本\t496


15.10 系统的优化与改进\t501


15.11 本章小结\t502





有问题微信扫码联系

推荐

Understand China
桂ICP备20004708号-4