封面
版权信息
内容简介
赞誉之辞
推荐序
译者序
前言
致谢
关于作者
关于译者
第1章 WebGL概述
WebGL的优势
使用文本编辑器开发三维应用
轻松发布三维图形程序
充分利用浏览器的功能
学习和使用WebGL很简单
WebGL的起源
WebGL程序的结构
总结
第2章 WebGL入门
Canvas是什么?
使用<canvas>标签
DrawRectangle.js
最短的WebGL程序:清空绘图区
HTML文件(HelloCanvas.html)
JavaScript程序(HelloCanvas.js)
用示例程序做实验
绘制一个点(版本1)
HelloPoint1.html
HelloPoint1.js
着色器是什么?
使用着色器的WebGL程序的结构
- APP免费
初始化着色器
- APP免费
顶点着色器
- APP免费
片元着色器
- APP免费
绘制操作
- APP免费
WebGL坐标系统
- APP免费
用示例程序做实验
- APP免费
绘制一个点(版本2)
- APP免费
使用attribute变量
- APP免费
示例程序(HelloPoint2.js)
- APP免费
获取attribute变量的存储位置
- APP免费
向attribute变量赋值
- APP免费
gl.vertexAttrib3f()的同族函数
- APP免费
用示例程序做实验
- APP免费
通过鼠标点击绘点
- APP免费
示例程序(ClickedPoints.js)
- APP免费
注册事件响应函数
- APP免费
响应鼠标点击事件
- APP免费
用示例程序做实验
- APP免费
改变点的颜色
- APP免费
示例程序(ColoredPoints.js)
- APP免费
uniform变量
- APP免费
获取uniform变量的存储地址
- APP免费
向uniform变量赋值
- APP免费
gl.uniform4f()的同族函数
- APP免费
总结
- APP免费
第3章 绘制和变换三角形
- APP免费
绘制多个点
- APP免费
示例程序(MultiPoint.js)
- APP免费
使用缓冲区对象
- APP免费
创建缓冲区对象(gl.createBuffer())
- APP免费
绑定缓冲区(gl.bindBuffer())
- APP免费
向缓冲区对象中写入数据(gl.bufferData())
- APP免费
类型化数组
- APP免费
将缓冲区对象分配给attribute变量(gl.vertexAttribPointer())
- APP免费
开启attribute变量(gl.enableVertexAttribArray())
- APP免费
gl.drawArrays()的第2个和第3个参数
- APP免费
用示例程序做实验
- APP免费
Hello Triangle
- APP免费
示例程序(HelloTriangle.js)
- APP免费
基本图形
- APP免费
用示例程序做实验
- APP免费
Hello Rectangle(HelloQuad)
- APP免费
用示例程序做实验
- APP免费
移动、旋转和缩放
- APP免费
平移
- APP免费
示例程序(TranslatedTriangle.js)
- APP免费
旋转
- APP免费
示例程序(RotatedTriangle.js)
- APP免费
变换矩阵:旋转
- APP免费
变换矩阵:平移
- APP免费
4×4的旋转矩阵
- APP免费
示例程序(RotatedTriangle_Matrix.js)
- APP免费
平移:相同的策略
- APP免费
变换矩阵:缩放
- APP免费
总结
- APP免费
第4章 高级变换与动画基础
- APP免费
平移,然后旋转
- APP免费
矩阵变换库:cuon-matrix.js
- APP免费
示例程序(RotatedTriangle_Matrix4.js)
- APP免费
复合变换
- APP免费
示例程序(RotatedTranslatedTriangle.js)
- APP免费
用示例程序做实验
- APP免费
动画
- APP免费
动画基础
- APP免费
示例程序(RotatingTriangle.js)
- APP免费
反复调用绘制函数(tick())
- APP免费
按照指定的旋转角度绘制三角形(draw())
- APP免费
请求再次被调用(requestAnimationFrame())
- APP免费
更新旋转角(animate())
- APP免费
用示例程序做实验
- APP免费
总结
- APP免费
第5章 颜色与纹理
- APP免费
将非坐标数据传入顶点着色器
- APP免费
示例程序(MultiAttributeSize.js)
- APP免费
创建多个缓冲区对象
- APP免费
gl.vertexAttribPointer()的步进和偏移参数
- APP免费
示例程序(MultiAttributeSize_Interleaved.js)
- APP免费
修改颜色(varying变量)
- APP免费
示例程序(MultiAttributeColor.js)
- APP免费
用示例程序做实验
- APP免费
彩色三角形(ColoredTriangle.js)
- APP免费
几何形状的装配和光栅化
- APP免费
调用片元着色器
- APP免费
用示例程序做实验
- APP免费
varying变量的作用和内插过程
- APP免费
在矩形表面贴上图像
- APP免费
纹理坐标
- APP免费
将纹理图像粘贴到几何图形上
- APP免费
示例程序(TexturedQuad.js)
- APP免费
设置纹理坐标(initVertexBuffers())
- APP免费
配置和加载纹理(initTextures())
- APP免费
为WebGL配置纹理(loadTexture())
- APP免费
图像Y轴反转
- APP免费
激活纹理单元(gl.activeTexture())
- APP免费
绑定纹理对象(gl.bindTexture())
- APP免费
配置纹理对象的参数(gl.texParameteri())
- APP免费
将纹理图像分配给纹理对象(gl.texImage2D())
- APP免费
将纹理单元传递给片元着色器(gl.uniform1i())
- APP免费
从顶点着色器向片元着色器传输纹理坐标
- APP免费
在片元着色器中获取纹理像素颜色(texture2D())
- APP免费
用示例程序做试验
- APP免费
使用多幅纹理
- APP免费
示例程序(MultiTexture.js)
- APP免费
总结
- APP免费
第6章 OpenGL ES着色器语言(GLSL ES)
- APP免费
回顾:基本着色器代码
- APP免费
GLSL ES概述
- APP免费
你好,着色器!
- APP免费
基础
- APP免费
执行次序
- APP免费
注释
- APP免费
数据值类型(数值和布尔值)
- APP免费
变量
- APP免费
GLSL ES是强类型语言
- APP免费
基本类型
- APP免费
赋值和类型转换
- APP免费
运算符
- APP免费
矢量和矩阵
- APP免费
赋值和构造
- APP免费
访问元素
- APP免费
运算符
- APP免费
结构体
- APP免费
赋值和构造
- APP免费
访问成员
- APP免费
运算符
- APP免费
数组
- APP免费
取样器(纹理)
- APP免费
运算符优先级
- APP免费
程序流程控制:分支和循环
- APP免费
if语句和if-else语句
- APP免费
for语句
- APP免费
continue、break和discard语句
- APP免费
函数
- APP免费
规范声明
- APP免费
参数限定词
- APP免费
内置函数
- APP免费
全局变量和局部变量
- APP免费
存储限定字
- APP免费
const变量
- APP免费
Attribute变量
- APP免费
uniform变量
- APP免费
varying变量
- APP免费
精度限定字
- APP免费
预处理指令
- APP免费
总结
- APP免费
第7章 进入三维世界
- APP免费
立方体由三角形构成
- APP免费
视点和视线
- APP免费
视点、观察目标点和上方向
- APP免费
示例程序(LookAtTriangles.js)
- APP免费
LookAtTriangles.js与RotatedTriangle_Matrix4.js
- APP免费
从指定视点观察旋转后的三角形
- APP免费
示例程序(LookAtRotatedTriangles.js)
- APP免费
用示例程序做实验
- APP免费
利用键盘改变视点
- APP免费
示例程序(LookAtTrianglesWithKeys.js)
- APP免费
独缺一角
- APP免费
可视范围(正射类型)
- APP免费
可视空间
- APP免费
定义盒状可视空间
- APP免费
示例程序(OrthoView.html)
- APP免费
示例程序(OrthoView.js)
- APP免费
JavaScript修改HTML元素
- APP免费
顶点着色器的执行流程
- APP免费
修改near和far值
- APP免费
补上缺掉的角(LookAtTrianglesWithKeys_ViewVolume.js)
- APP免费
用示例程序做实验
- APP免费
可视空间(透视投影)
- APP免费
定义透视投影可视空间
- APP免费
示例程序(perspectiveview.js)
- APP免费
投影矩阵的作用
- APP免费
共冶一炉(模型矩阵、视图矩阵和投影矩阵)
- APP免费
示例程序(PerspectiveView_mvp.js)
- APP免费
用示例程序做实验
- APP免费
正确处理对象的前后关系
- APP免费
隐藏面消除
- APP免费
示例程序(DepthBuffer.js)
- APP免费
深度冲突
- APP免费
立方体
- APP免费
通过顶点索引绘制物体
- APP免费
示例程序(HelloCube.js)
- APP免费
向缓冲区中写入顶点的坐标、颜色与索引
- APP免费
为立方体的每个表面指定颜色
- APP免费
示例程序(ColoredCube.js)
- APP免费
用示例程序做实验
- APP免费
总结
- APP免费
第8章 光照
- APP免费
光照原理
- APP免费
光源类型
- APP免费
反射类型
- APP免费
平行光下的漫反射
- APP免费
根据光线和表面的方向计算入射角
- APP免费
法线:表面的朝向
- APP免费
一个表面具有两个法向量
- APP免费
平面的法向量唯一
- APP免费
示例程序(LightedCube.js)
- APP免费
顶点着色器
- APP免费
JavaScript程序流程
- APP免费
环境光下的漫反射
- APP免费
示例程序(LightedCube_ambient.js)
- APP免费
运动物体的光照效果
- APP免费
魔法矩阵:逆转置矩阵
- APP免费
示例程序(LightedTranslatedRotatedCube.js)
- APP免费
点光源光
- APP免费
示例程序(PointLightedCube.js)
- APP免费
更逼真:逐片元光照
- APP免费
示例程序(PointLightedCube_perFragment.js)
- APP免费
总结
- APP免费
第9章 层次模型
- APP免费
多个简单模型组成的复杂模型
- APP免费
层次结构模型
- APP免费
单关节模型
- APP免费
示例程序(JointMode.js)
- APP免费
绘制层次模型(draw())
- APP免费
多节点模型
- APP免费
示例程序(MultiJointModel.js)
- APP免费
绘制部件(drawBox())
- APP免费
绘制部件(drawSegments())
- APP免费
着色器和着色器程序对象:initShaders()函数的作用
- APP免费
创建着色器对象(gl.createShader())
- APP免费
指定着色器对象的代码(gl.shaderSource())
- APP免费
编译着色器(gl.compileShader())
- APP免费
创建程序对象(gl.createProgram())
- APP免费
为程序对象分配着色器对象(gl.attachShader())
- APP免费
连接程序对象(gl.linkProgram())
- APP免费
告知WebGL系统所使用的程序对象(gl.useProgram())
- APP免费
initShaders()函数的内部流程
- APP免费
总结
- APP免费
第10章 高级技术
- APP免费
用鼠标控制物体旋转
- APP免费
如何实现物体旋转
- APP免费
示例程序(RotateObject.js)
- APP免费
选中物体
- APP免费
如何实现选中物体
- APP免费
示例程序(PickObject.js)
- APP免费
选中一个表面
- APP免费
示例程序(PickFace.js)
- APP免费
HUD(平视显示器)
- APP免费
如何实现HUD
- APP免费
示例程序(HUD.html)
- APP免费
示例程序(HUD.js)
- APP免费
在网页上方显示三维物体
- APP免费
雾化(大气效果)
- APP免费
如何实现雾化
- APP免费
示例程序(Fog.js)
- APP免费
使用w分量(Fog_w.js)
- APP免费
绘制圆形的点
- APP免费
如何实现圆形的点
- APP免费
示例程序(RoundedPoint.js)
- APP免费
α混合
- APP免费
如何实现α混合
- APP免费
示例程序(LookAtBlendedTriangles.js)
- APP免费
混合函数
- APP免费
半透明的三维物体(BlendedCube.js)
- APP免费
透明与不透明物体共存
- APP免费
切换着色器
- APP免费
如何实现切换着色器
- APP免费
示例程序(ProgramObject.js)
- APP免费
渲染到纹理
- APP免费
帧缓冲区对象和渲染缓冲区对象
- APP免费
如何实现渲染到纹理
- APP免费
示例程序(FramebufferObject.js)
- APP免费
创建帧缓冲区对象(gl.createFramebuffer())
- APP免费
创建纹理对象并设置其尺寸和参数
- APP免费
创建渲染缓冲区对象(gl.createRenderbuffer())
- APP免费
绑定渲染缓冲区并设置其尺寸(gl.bindRenderbuffer(),gl.renderbufferStorage())
- APP免费
将纹理对象关联到帧缓冲区对象(gl.bindFramebuffer(),gl.framebufferTexture2D())
- APP免费
将渲染缓冲区对象关联到帧缓冲区对象(gl.framebufferRenderbuffer())
- APP免费
检查帧缓冲区的配置(gl.checkFramebufferStatus())
- APP免费
在帧缓冲区进行绘图
- APP免费
绘制阴影
- APP免费
如何实现阴影
- APP免费
示例程序(Shadow.js)
- APP免费
提高精度
- APP免费
示例程序(Shadow_highp.js)
- APP免费
加载三维模型
- APP免费
OBJ文件格式
- APP免费
MTL文件格式
- APP免费
示例程序(OBJViewer.js)
- APP免费
自定义类型对象
- APP免费
示例程序(OBJViewer.js解析数据部分)
- APP免费
响应上下文丢失
- APP免费
如何响应上下文丢失
- APP免费
示例程序(RotatingTriangle_contextLost.js)
- APP免费
总结
- APP免费
附录A WebGL中无须交换缓冲区
- APP免费
附录B GLSL ES 1.0内置函数
- APP免费
附录C 投影矩阵
- APP免费
附录D WebGL/OpenGL:左手还是右手坐标系?
- APP免费
附录E 逆转置矩阵
- APP免费
附录F 从文件中加载着色器
- APP免费
附录G 世界坐标系和本地坐标系
- APP免费
附录H WebGL的浏览器设置
- APP免费
术语表
- APP免费
封底
更新时间:2023-04-25 09:30:05