首页>参考读物>计算机科学与技术>计算机网络

Three.js开发指南:基于WebGL和HTML5在网页上渲染3D图形和动画(原书第3版)
作者 : [美]乔斯·德克森(Jos Dirksen ) 著
译者 : 周翀 张薇 译
丛书名 : Web开发技术丛书
出版日期 : 2019-06-14
ISBN : 978-7-111-62884-2
定价 : 99.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 326
开本 : 16
原书名 : Learn Three.js: Programming 3D animations and visualizations for the web with HTML5 and WebGL, Third Edition
原出版社: Packt Publishing Ltd.
属性分类: 店面
包含CD : 无CD
绝版 : 未绝版
图书简介

本书将介绍如何直接在浏览器中创建漂亮的3D场景和动画,并且充分发挥WebGL和现代浏览器的潜能。首先介绍基本概念和基础组件,然后通过逐渐扩展示例代码逐步深入讲解更多高级技术。在本书中读者将学到如何从外部加载3D模型和具有真实效果的材质纹理、学习使用Three.js提供的摄像机组件来实现在3D场景中飞行和走动、如何将HTML5视频和画布作为材质贴在3D模型表面。此外还将学习变形动画和骨骼动画,甚至还会涉及在场景中使用物理模拟的方法,例如重力、碰撞检测等等。

图书特色

全面讲解Three.js开发的实用指南,涵盖Three.js的各种功能
通过大量交互式示例,深入探索使用开源的Three.js库创建绚丽三维图形的实用方法和技巧
Learning Three.js
Programming 3D animations and visualizations
for the web with HTML5 and WebGL, Third Edition
[ 美 ] 乔斯 ? 德克森(Jos Dirksen)著
周翀 张薇 译

基于WebGL和HTML5在网页上渲染3D图形和动画(原书第3版)

图书前言

在最近的几年中,浏览器的功能变得愈发强大,并且成为展现复杂的应用和图形的平台。然而其中大部分都是标准的二维图形。大多数现代浏览器已经支持WebGL,不仅可以在浏览器端创建二维应用和图形,而且可以通过GPU的功能创建好看并且运行良好的三维应用。
然而,直接使用WebGL编程还是很复杂的。编程者需要知道WebGL的底层细节,并且学习复杂的着色语言来获得WebGL的大部分功能。Three.js提供了一个很简单的关于WebGL特性的JavaScript API,所以用户不需要详细地学习WebGL,就能创作出好看的三维图形。
Three.js为直接在浏览器中创建三维场景提供了大量的特性和API。阅读这本书,读者将通过许多交互示例和示例代码学习Three.js提供的各种API。
本书内容
第1章介绍使用Three.js的基本步骤。阅读完本章就能立刻创建你的第一个Three.js场景,也能直接在浏览器中创建你的第一个三维场景并让它动起来。
第2章解释使用Three.js时需要了解的基本组件。将介绍灯光、网格、几何形状、材质和摄像机。阅读本章,读者也将对Three.js提供的不同灯光和在场景中使用的摄像机有一个大概的印象。
第3章深入介绍可以在场景中使用的不同灯光。本章会通过示例讲解如何使用聚光灯、平行光、环境光、点光源、半球光和区域光。此外,本章还会展示如何使用镜头光晕来影响光源。
第4章讲述Three.js中可在网格中使用的材质。本章展示可以设置的所有属性,并且提供不同的交互示例来阐述Three.js中可用的材质。
第5章讲述Three.js中的几何体。本章将介绍如何在Three.js中创建和配置几何体,并且提供了几何体的交互示例,包括平面、圆形、任意图形、长方体、球体、圆柱体、圆环、环状扭结和多面体。
第6章接着第5章讲解如何使用几何体。本章介绍如何配置和使用Three.js提供的更高级的几何体,如凸面体和旋转体。在本章,你还能学到如何从二维形状拉伸出三维几何体,并且学会通过二元操作来组合几何体,从而创建出一个新的几何体。
第7章解释如何使用Three.js中的精灵和粒子,介绍从头开始或者通过现有的几何体来创建一个粒子系统。这一章还介绍如何使用精灵或点云材质来改变单个点的外观。
第8章介绍如何通过外部资源导入网格和几何体,以及如何使用Three.js内置的JSON格式来保存几何体和场景。本章还会解释如何加载不同格式的模型,如OBJ、DAE、STL、CTM、PLY等。
第9章展示可以让场景动起来的各种动画,包括如何组合使用Tween.js库和Three.js,以及如何使用基于变形和骨骼的动画模型。
第10章延续第4章的内容—使用Three.js材质。在第4章已经初步介绍了材质,本章着重介绍现有的各种材质以及如何把材质应用到网格中。另外,本章还介绍如何直接使用HTML5中的视频元素和画布元素作为材质来源。
第11章展示如何使用Three.js对已经渲染过的场景进行后期处理。通过后期处理,你可以将模糊、倾斜移位和着色等效果添加到已经渲染过的场景中。除此之外,本章还介绍如何创建自己的后期处理效果、自定义的顶点和片段着色器。
第12章解释如何将物理效果添加到Three.js场景中。通过物理效果,你能检测物体之间的碰撞,使物体对重力有响应,以及应用摩擦力。本章会展示如何用Physijs JavaScript库实现这些效果。此外,本章还会展示如何在Three.js场景中添加声音。
本书的使用要求
使用本书只需稍微了解JavaScript,并按照第1章的指导搭建一个本地的网络服务器和获取书中使用的示例。
面向的读者
这本书对于每一个知道JavaScript并且想要在浏览器中创建运行的三维图形的人来说都是很棒的。你不需要知道任何高级的数学知识或WebGL,所需的只是对JavaScript和HTML有大致的了解。书中所需要的材料和示例都可以免费下载,所用的工具都是开源的。所以,如果你想创建可以在任何现代浏览器中运行的交互的三维图形,这本书就适合你。
下载示例代码及彩图
本书的示例代码及彩图,可从http://www.packtpub.com通过个人账号下载,也可以访问机工新阅读网站(www.cmpreading.com),通过注册并登录个人账号下载。

上架指导

计算机\Web开发

封底文字

现代浏览器都支持WebGL,这样不必使用Flash、Java等插件就能在浏览器中创建三维图形。然而,直接使用WebGL在浏览器中创建三维图形和动画也非常繁琐,它所提供的各种接口尽管非常丰富且强大,但对于用户来说未免过于复杂了。
  Three.js的出现则完美地帮助人们解决了这个矛盾。Three.js将WebGL的强大功能融汇其中,同时又非常易于使用,即便用户对其中的原理不甚了解,也能借助Three.js创建出绚丽多姿的三维场景和动画。
  本书先从基本概念和Three.js的基本模块讲起,然后伴随着大量的示例和代码,逐步扩展到更多的主题,循序渐进地讲解Three.js的各种功能,帮助你充分利用WebGL和现代浏览器的潜能,直接在浏览器中创建动态的华丽场景。

通过阅读本书,你将学会:
 使用Three.js提供的各种材质并了解它们如何与3D模型和场景相互作用
 通过Three.js提供的各种摄像机控制功能,在三维场景中轻松导航
 通过直接操作顶点实现雨、雪以及宇宙星系效果
 导入OBJ、STL、COLLADA等外部格式的模型和创建动画效果
 创建和运行基于形态和框架的动画
 在材质上应用高级纹理(凹凸贴图、法向贴图、高光贴图和光照贴图),创建逼真的三维图形
 使用Physijs这个JavaScript库,实现三维物体的物理效果
 创建自定义顶点和片段着色器,实现与WebGL的直接交互

译者简介

周翀 张薇 译:暂无简介

译者序

早年间,不论在何种硬件平台上,由于软硬件技术局限,交互式3D图形程序一直与低级的汇编语言和C/C++语言深度绑定,这是因为更高级的编程语言要么难以访问底层图形API(例如OpenGL或Direct3D),要么没有足够的运行效率。
随着Web技术的不断发展,在网页上显示更丰富的内容逐渐成为时代趋势。其中,网页3D图形技术一直拥有较高呼声。然而由于上述编程语言绑定,这一技术的发展一直举步维艰。
幸运的是,个人计算机技术在最近20年间已经在很多关键方面取得了重大发展:CPU的核心频率提升了约40倍;GPU在早期只能做到全屏反锯齿和辅助线性插值,如今几乎可以直接渲染由CAD软件生成的3D模型;而更关键的是,随着WebGL API在2011年由Khronos Group推出后,3D图形技术正式向高级编程语言JavaScript敞开大门。众所周知,JavaScript语言是网页开发的当红主角,这也就意味着网页3D图形的时代正式到来,而随之而来的是无限的商机和全新的就业岗位。
本书将介绍2018年推出的r95版本Three.js库,以及与之相关的物理模拟库Physijs。
Three.js库是建立在WebGL API基础之上的高级API,其功能介于底层图形API和通用3D引擎(例如Unity 3D等)之间。它具有通常在3D引擎中才能见到的“材质”概念,不但能够直接实现Phong-Blinn实时光照、实时阴影、法向贴图、环境贴图等传统技术,还能支持时下流行的“基于物理渲染”(PBR)技术。同时,它还提供了许多现成的着色器程序,可以实现3D引擎中常见的高级效果,包括但不限于全屏环境光遮挡(SSAO)、景深(DOF)等。
本书对基于Three.js库的网页3D图形编程进行了细致入微的介绍。每一个技术点的学习都建立在对示例程序的分析和把玩基础之上,并且没有涉及任何3D图形渲染所需的数学和物理原理及公式推导。这不但让3D图形零基础的读者能充分理解和快速掌握这些技术,而且使其学习过程像游戏一样生动有趣。
近些年,对于高级技术的研究和学习,在网络社区里有一句流行的调侃语:“从入门到放弃”。然而这一现象在学习本书的过程中并不存在。

图书目录

译者序
前言
第1章 使用Three.js创建你的第一个三维场景1
1.1 准备工作3
1.2 获取源码5
1.2.1 通过Git获取代码仓库5
1.2.2 下载并解压缩档案文件5
1.2.3 测试示例6
1.3 搭建HTML框架9
1.4 渲染并查看三维对象10
1.5 添加材质、光源和阴影效果14
1.6 让你的场景动起来16
1.6.1 引入requestAnimationFrame()方法16
1.6.2 旋转立方体18
1.6.3 弹跳球19
1.7 使用dat.GUI简化试验流程20
1.8 场景对浏览器的自适应22
1.9 总结23
第2章 构建Three.js应用的基本组件24
2.1 创建场景24
2.1.1 场景的基本功能25
2.1.2 给场景添加雾化效果29
2.1.3 使用overrideMaterial属性30
2.2 几何体和网格32
2.2.1 几何体的属性和方法32
2.2.2 网格对象的属性和方法36
2.3 选择合适的摄像机40
2.3.1 正交投影摄像机和透视投影摄像机41
2.3.2 将摄像机聚焦在指定点上45
2.4 总结46
第3章 学习使用Three.js中的光源47
3.1 Three.js中不同种类的光源47
3.2 基础光源48
3.2.1 THREE.AmbientLight48
3.2.2 THREE.SpotLight53
3.2.3 THREE.PointLight58
3.2.4 THREE.DirectionalLight62
3.3 特殊光源63
3.3.1 THREE.HemisphereLight64
3.3.2 THREE.AreaLight65
3.3.3 镜头光晕67
3.4 总结69
第4章 使用Three.js的材质70
4.1 理解材质的共有属性71
4.1.1 基础属性71
4.1.2 融合属性73
4.1.3 高级属性73
4.2 从简单的网格材质开始74
4.2.1 THREE.MeshBasicMaterial75
4.2.2 THREE.MeshDepthMaterial77
4.2.3 联合材质79
4.2.4 THREE.MeshNormalMaterial80
4.2.5 在单几何体上使用多种材质82
4.3 高级材质84
4.3.1 THREE.MeshLambertMaterial85
4.3.2 THREE.MeshPhongMaterial86
4.3.3 THREE.MeshStandardMaterial88
4.3.4 THREE.MeshPhysicalMaterial89
4.3.5 用THREE.ShaderMaterial创建自己的着色器89
4.4 线性几何体的材质95
4.4.1 THREE.LineBasicMaterial95
4.4.2 THREE.LineDashedMaterial97
4.5 总结97
第5章 学习使用几何体99
5.1 Three.js提供的基础几何体101
5.1.1 二维几何体101
5.1.2 三维几何体109
5.2 总结120
第6章 高级几何体和二元操作122
6.1 THREE.ConvexGeometry122
6.2 THREE.LatheGeometry124
6.3 通过拉伸创建几何体125
6.3.1 THREE.ExtrudeGeometry126
6.3.2 THREE.TubeGeometry127
6.3.3 从SVG拉伸129
6.4 THREE.ParametricGeometry131
6.5 创建三维文本133
6.5.1 渲染文本133
6.5.2 添加自定义字体136
6.6 使用二元操作组合网格137
6.6.1 subtract函数139
6.6.2 intersect函数142
6.6.3 union函数143
6.7 总结143
第7章 粒子和精灵145
7.1 理解粒子145
7.2 THREE.Points和THREE.PointsMaterial148
7.3 使用HTML5画布样式化粒子151
7.3.1 在THREE.CanvasRenderer中使用HTML5画布151
7.3.2 在WebGLRenderer中使用HTML5画布152
7.4 使用纹理样式化粒子155
7.5 使用精灵贴图160
7.6 从高级几何体创建THREE.Points163
7.7 总结165
第8章 创建、加载高级网格和几何体166
8.1 几何体组合与合并166
8.1.1 对象组合166
8.1.2 将多个网格合并成一个网格168
8.2 从外部资源加载几何体170
8.2.1 以Three.js的JSON格式保存和加载171
8.2.2 使用Blender177
8.3 导入三维格式文件181
8.3.1 OBJ和MTL格式181
8.3.2 加载Collada模型185
8.3.3 从其他格式的文件中加载模型186
8.3.4 展示蛋白质数据银行中的蛋白质190
8.3.5 从PLY模型中创建粒子系统192
8.4 总结194
第9章 创建动画和移动摄像机195
9.1 基础动画195
9.1.1 简单动画196
9.1.2 选择对象197
9.1.3 使用Tween.js实现动画198
9.2 使用摄像机201
9.2.1 轨迹球控制器202
9.2.2 飞行控制器204
9.2.3 第一视角控制器205
9.2.4 轨道控制器207
9.3 变形动画和骨骼动画208
9.3.1 用变形目标创建动画209
9.3.2 用骨骼和蒙皮创建动画217
9.4 使用外部模型创建动画220
9.4.1 使用Blender创建骨骼动画220
9.4.2 从Collada模型加载动画223
9.4.3 从雷神之锤模型中加载动画225
9.4.4 使用gltfLoader225
9.4.5 利用fbxLoader显示动作捕捉模型动画227
9.4.6 通过xLoader加载古老的DirectX模型228
9.4.7 利用BVHLoader显示骨骼动画230
9.4.8 如何重用SEA3D模型231
9.5 总结232
第10章 加载和使用纹理233
10.1 将纹理应用于材质233
10.1.1 加载纹理并应用到网格233
10.1.2 使用凹凸贴图创建褶皱238
10.1.3 使用法向贴图创建更加细致的凹凸和褶皱239
10.1.4 使用移位贴图来改变顶点位置240
10.1.5 用环境光遮挡贴图实现细节阴影241
10.1.6 用光照贴图产生假阴影243
10.1.7 金属光泽度贴图和粗糙度贴图244
10.1.8 Alpha贴图246
10.1.9 自发光贴图247
10.1.10 高光贴图248
10.1.11 使用环境贴图创建伪镜面反射效果250
10.2 纹理的高级用途255
10.2.1 自定义UV映射255
10.2.2 重复纹理258
10.2.3 在画布上绘制图案并作为纹理260
10.2.4 将视频输出作为纹理262
10.3 总结263
第11章 自定义着色器和后期处理265
11.1 配置Three.js以进行后期处理265
11.2 后期处理通道268
11.2.1 简单后期处理通道270
11.2.2 使用掩码的高级效果组合器274
11.2.3 高级渲染通道:景深效果278
11.2.4 高级渲染通道:环境光遮挡280
11.3 使用THREE.ShaderPass自定义效果281
11.3.1 简单着色器283
11.3.2 模糊着色器285
11.4 创建自定义后期处理着色器287
11.4.1 自定义灰度图着色器287
11.4.2 自定义位着色器290
11.5 总结292
第12章 在场景中添加物理效果和声音293
12.1 创建基本的Three.js场景294
12.2 Physi.js材质属性298
12.3 Physi.js基础形体300
12.4 使用约束限制对象的移动304
12.4.1 使用PointConstraint限制对象在两点间移动305
12.4.2 使用HingeConstraint创建类似门的约束306
12.4.3 使用SliderConstraint将移动限制在一个轴上309
12.4.4 使用ConeTwistConstraint创建类似球销的约束311
12.4.5 使用DOFConstraint实现细节的控制312
12.5 在场景中添加声源315
12.6 总结317

教学资源推荐
作者: 熊建强 黄文斌 彭庆喜 主编
作者: 龚玲 张云涛
作者: [美] 威廉·斯托林斯(William Stallings) 等 著
参考读物推荐
作者: (美)Sean Crookston  Harley Stagner 著
作者: 包建强 著
作者: Jennifer Niederst