书籍简介:
本书是作者多年来教学与科研工作的总结,采用自顶向下的结构进行讲解,涵盖了基于WebGL编程工具的交互式图形编程、三维可编程绘制流水线、变换与观察、光照与明暗绘制、曲线曲面建模等基本的计算机图形学内容,以及离散技术、层级建模、过程建模、光线跟踪、并行绘制和体绘制等高级内容。并为读者进一步深入学习和研究,在每章后面提供了相关的建议阅读资料。
作者简介:
Edward Angel,是新墨西哥大学(UNM)计算机科学的退休教授,并担任过艺术、技术和科学实验室(ARTS Lab)的主任。直到2007年7月,他一直是UNM的计算机科学、电子与计算机工程、媒体艺术教授。Angel于1964年在加州理工大学获得学士学位,并于1968年在南加州大学获得博士学位。他曾任职于加州大学伯克利分校、南加州大学和罗切斯特大学。Angel目前的研究领域是计算机图形学及科学可视化、虚拟现实和大规模并行计算等。
张荣华,华北电力大学计算机与科学学院,高级工程师,主要研究方向为计算机视觉、计算机图形学等,曾翻译过多部图形学著作。
出版日期:
2016年03月
章节目录:
第1章 图形系统和模型
1.1 计算机图形学的应用
1.1.1 信息的显示
1.1.2 设计
1.1.3 仿真和动画
1.1.4 用户界面
1.2 图形系统
1.2.1 像素和帧缓存
1.2.2 CPU与GPU
1.2.3 输出设备
1.2.4 输入设备
1.3 物理图像与合成图像
1.3.1 对象和观察者
1.3.2 光和图像
1.3.3 成像模型
1.4 成像系统
1.4.1 针孔照相机
1.4.2 人类视觉系统
1.5 虚拟照相机模型
1.6 应用程序编程接口
1.6.1 笔式绘图仪模型
1.6.2 三维API
1.6.3 使用WebGL API绘制的一系列图像
1.6.4 建模-绘制模式
1.7 图形绘制系统的体系结构
1.7.1 显示处理器
1.7.2 流水线体系结构
1.7.3 图形绘制流水线
1.7.4 顶点处理
1.7.5 裁剪和图元组装
1.7.6 光栅化
1.7.7 片元处理
1.8 可编程流水线
1.9 性能特征
1.10OpenGL版本和WebGL
小结和注释
建议阅读资料
习题
第2章 图形学编程
2.1 Sierpinski镂垫
2.2 编写二维图形应用程序
2.3 WebGL应用程序编程接口
2.3.1 图形函数
2.3.2 图形绘制流水线和状态机
2.3.3 OpenGL和WebGL
2.3.4 WebGL接口
2.3.5 坐标系
2.4 图元和属性
2.4.1 多边形的基本概念
2.4.2 WebGL中的多边形
2.4.3 利用多边形近似球面
2.4.4 三角剖分
2.4.5 文本
2.4.6 曲线和曲面对象
2.4.7 属性
2.5 颜色
2.5.1 RGB颜色
2.5.2 索引颜色
2.5.3 设置颜色属性
2.6 观察
2.6.1 正投影
2.6.2 二维观察
2.7 控制函数
2.7.1 和窗口系统的交互
2.7.2 宽高比和视口
2.7.3 应用程序组织结构
2.8 Sierpinski镂垫绘制程序
2.8.1 向GPU发送数据
2.8.2 绘制Sierpinski镂垫的点数据
2.8.3 顶点着色器
2.8.4 片元着色器
2.8.5 组合代码段
2.8.6 initShaders()函数
2.8.7 init()函数
2.8.8 从应用程序读入着色器
2.9 多边形和递归
2.10三维Sierpinski镂垫
2.10.1 使用三维点
2.10.2 命名规范
2.10.3 使用多边形的三维Sierpinski镂垫
2.10.4 隐藏面消除
小结和注释
建议阅读资料
习题
第3章 交互和动画
3.1 动画
3.1.1 旋转的正方形
3.1.2 显示过程
3.1.3 双缓存
3.1.4 使用定时器
3.1.5 使用requestAnimFrame函数
3.2 交互
3.3 输入设备
3.4 物理输入设备
3.4.1 键盘码
3.4.2 光笔
3.4.3 鼠标和跟踪球
3.4.4 数据板、 触摸板和触摸屏
3.4.5 操作杆
3.4.6 多维输入设备
3.4.7 逻辑设备
3.4.8 输入模式
3.5 客户和服务器
3.6 事件驱动输入编程
3.6.1 事件和事件监听器
3.6.2 增加按钮
3.6.3 菜单
3.6.4 使用键码
3.6.5 滑动条
3.7 位置输入
3.8 窗口事件
3.9 拾取
3.10建立交互式模型
3.11交互式程序的设计
小结和注释
建议阅读资料
习题
第4章 几何对象和变换
4.1 标量、 点和向量
4.1.1 几何对象
4.1.2 与坐标无关的几何
4.1.3 数学的观点: 向量空间和仿射空间
4.1.4 计算机科学的观点
4.1.5 几何ADT
4.1.6 直线
4.1.7 仿射加法
4.1.8 凸性
4.1.9 点积和叉积
4.1.10平面
4.2 三维图元
4.3 坐标系和标架
4.3.1 向量的表示和n元组
4.3.2 坐标系的变换
4.3.3 举例: 不同基下的表示之间的变换
4.3.4 齐次坐标
4.3.5 举例: 标架变换
4.3.6 对表示进行处理
4.4 WebGL中的标架
4.5 矩阵和向量类型
4.6 建模一个彩色立方体
4.6.1 建模立方体的面
4.6.2 向内和向外的面
4.6.3 表示对象的数据结构
4.6.4 彩色立方体
4.6.5 颜色插值
4.6.6 显示立方体
4.6.7 使用元素绘制网格
4.7 仿射变换
4.8 平移、 旋转和缩放
4.8.1 平移
4.8.2 旋转
4.8.3 缩放
4.9 变换的齐次坐标表示
4.9.1 平移
4.9.2 缩放
4.9.3 旋转
4.9.4 错切
4.10 变换的级联
4.10.1 不动点在任意位置的旋转
4.10.2 一般的旋转
4.10.3 实例变换
4.10.4 绕任意轴的旋转
4.11 WebGL中的变换矩阵
4.11.1 当前变换矩阵
4.11.2 基本矩阵函数
4.11.3 旋转、 平移和缩放
4.11.4 绕任意不动点的旋转
4.11.5 变换的顺序
4.12使立方体旋转起来
4.13三维应用程序的接口
4.13.1 使用屏幕区域
4.13.2 虚拟跟踪球
4.13.3 平滑的旋转
4.13.4 增量式旋转
4.14四元数
4.14.1 复数和四元数
4.14.2 四元数和旋转
4.14.3 四元数和万向节死锁
小结和注释
建议阅读资料
习题
第5章 观察
5.1 经典观察和计算机观察
5.1.1 经典观察
5.1.2 正投影
5.1.3 轴测投影
5.1.4 斜投影
5.1.5 透视观察
5.2 计算机观察
5.3 定位照相机
5.3.1 照相机标架的定位
5.3.2 两个观察API
5.3.3 lookAt函数
5.3.4 其他观察API
5.4 平行投影
5.4.1 正投影
5.4.2 WebGL中的平行投影
5.4.3 投影的规范化
5.4.4 正投影变换矩阵
5.4.5 斜投影
5.4.6 交互式观察立方体
5.5 透视投影
5.6 WebGL中的透视投影
5.7 透视投影变换矩阵
5.7.1 透视投影的规范化
5.7.2 WebGL中的透视投影变换
5.7.3 透视投影示例程序
5.8 隐藏面消除
5.9 显示网格
5.9.1 显示网格曲面
5.9.2 多边形偏移
5.9.3 在场景中漫游
5.10 投影和阴影
5.11 阴影映射
小结和注释
建议阅读资料
习题
第6章 光照和着色
6.1 光线和材质
6.2 光源
6.2.1 彩色光源
6.2.2 环境光
6.2.3 点光源
6.2.4 聚光灯
6.2.5 远距离光源
6.3 Phong反射模型
6.3.1 环境光反射
6.3.2 漫反射
6.3.3 镜面反射
6.3.4 改进的Phong模型
6.4 计算向量
6.4.1 法向量
6.4.2 反射角
6.5 多边形的着色
6.5.1 均匀着色
6.5.2 平滑着色
6.5.3 Phong着色
6.6 通过递归细分逼近球面
6.7 指定光照参数
6.7.1 光源
6.7.2 材质
6.8 实现光照模型
6.8.1 在WebGL应用程序代码中应用光照模型
6.8.2 绘制效率
6.8.3 在顶点着色器中实现光照计算
6.9 球面模型的着色
6.10 基于每个片元的光照计算
6.11 非真实感着色
6.12 全局光照
小结和注释
建议阅读资料
习题
第7章 离散技术
7.1 缓存
7.2 数字图像
7.3 映射方法
7.4 二维纹理映射
7.5 WebGL的纹理映射
7.5.1 纹理对象
7.5.2 纹理图像数组
7.5.3 纹理坐标和纹理采样器
7.5.4 纹理采样
7.5.5 使用纹理坐标
7.5.6 多纹理映射
7.6 纹理生成
7.7 环境贴图
7.8 反射贴图示例程序
7.9 凹凸映射
7.9.1 计算凹凸贴图
7.9.2 凹凸贴图示例程序
7.10 融合技术
7.10.1 不透明度与融合
7.10.2 图像融合
7.10.3 WebGL中图像的融合
7.10.4 再探反走样
7.10.5 从后向前或从前向后绘制多边形
7.10.6 场景反走样和多重采样
7.10.7 图像处理
7.10.8 其他的多通道绘制方法
7.11 GPGPU
7.12 帧缓存对象
7.13 缓存交换
7.14 拾取
小结和注释
建议阅读资料
习题
第8章 从几何到像素
8.1 图形绘制流水线的基本实现策略
8.2 图形绘制系统的四个主要任务
8.2.1 建模
8.2.2 几何处理
8.2.3 光栅化
8.2.4 片元处理
8.3 裁剪
8.4 线段的裁剪
8.4.1 Cohen-Sutherland裁剪算法
8.4.2 Liang-Barsky裁剪算法
8.5 多边形的裁剪
8.6 其他图元的裁剪
8.6.1 包围盒与包围体
8.6.2 曲线、 曲面和字符的裁剪
8.6.3 帧缓存中的裁剪
8.7 三维裁剪
8.8 光栅化
8.9 Bresenham算法
8.10 多边形光栅化算法
8.10.1 内外测试法
8.10.2 WebGL与凹多边形
8.10.3 填充与分类
8.10.4 漫水填充算法
8.10.5 处理奇点
8.11 隐藏面消除
8.11.1 对象空间和图像空间消隐算法
8.11.2 排序与隐藏面消除
8.11.3 扫描线填充算法
8.11.4 背面剔除
8.11.5 z缓存算法
8.11.6 基于z缓存的扫描转换算法
8.11.7 深度排序和画家算法
8.12 反走样
8.13 显示方面的问题
8.13.1 颜色系统
8.13.2 颜色矩阵
8.13.3 γ校正
8.13.4 抖动输出技术和半色调输出
技术
小结和注释
建议阅读资料
习题
第9章 层级建模方法
9.1 图符和实例
9.2 层级模型
9.3 机器人手臂
9.4 树与遍历
9.5 使用树数据结构
9.6 动画
9.7 图形对象
9.7.1 方法、 属性和消息
9.7.2 一个立方体对象
9.7.3 对象与层级结构
9.7.4 几何和非几何对象
9.8 场景图
9.9 实现场景图
9.10 其他树结构
9.10.1 CSG树
9.10.2 BSP树
9.10.3 四叉树和八叉树
小结和注释
建议阅读资料
习题
第10章 过程建模方法
10.1 基于算法的建模
10.2 基于物理的建模和粒子系统
10.3 牛顿粒子
10.3.1 独立的粒子
10.3.2 弹簧力
10.3.3 吸引力与排斥力
10.4 求解粒子系统方程
10.5 约束条件
10.5.1 碰撞
10.5.2 软约束
10.6 一个简单的粒子系统
10.6.1 绘制粒子
10.6.2 更新粒子的位置
10.6.3 碰撞
10.6.4 作用力
10.6.5 群聚行为
10.7 基于agent的建模
10.8 基于语言的建模
10.9 递归方法和分形
10.9.1 标尺和长度
10.9.2 分形维数
10.9.3 中点划分及布朗运动
10.9.4 分形山脉
10.9.5 Mandelbrot集
10.9.6 Mandelbrot片元着色器
10.10 过程噪声
小结和注释
建议阅读资料
习题
第11章 曲线和曲面
11.1 曲线和曲面的表示形式
11.1.1 显式表示形式
11.1.2 隐式表示形式
11.1.3 参数表示形式
11.1.4 参数多项式曲线
11.1.5 参数多项式曲面
11.2 设计准则
11.3 三次参数多项式曲线
11.4 插值
11.4.1 调和函数
11.4.2 三次插值曲面片
11.5 Hermite曲线和曲面
11.5.1 Hermite形式
11.5.2 几何与参数连续性
11.6 B?zier曲线和曲面
11.6.1 B?zier曲线
11.6.2 B?zier曲面片
11.7 三次B样条
11.7.1 三次B样条曲线
11.7.2 B样条和基函数
11.7.3 样条曲面
11.8 普通B样条
11.8.1 B样条的递归定义
11.8.2 均匀样条
11.8.3 非均匀B样条
11.8.4 NURBS
11.8.5 Catmull-Rom样条
11.9 曲线和曲面的绘制
11.9.1 多项式求值方法
11.9.2 递归细分B?zier多项式
11.9.3 基于细分算法的其他多项式曲线的绘制
11.9.4 细分B?zier曲面
11.10 Utah茶壶模型
11.11 代数曲面
11.11.1 二次曲面
11.11.2 使用光线跟踪绘制曲面
11.12 曲线和曲面的细分
11.13 从数据生成网格
11.13.1 回顾高度场
11.13.2 Delaunay三角剖分
11.13.3 点云
11.14 支持曲线和曲面的图形API
11.14.1 曲面细分着色
11.14.2 几何着色
小结和注释
建议阅读资料
习题
第12章 高级绘制
12.1 超越流水线绘制结构
12.2 光线跟踪
12.3 构建一个简单的光线跟踪器
12.3.1 光线跟踪递归算法
12.3.2 计算交点
12.3.3 其他不同形式的光线跟踪
12.4 绘制方程
12.5 辐射度方法
12.5.1 辐射度方程
12.5.2 求解辐射度方程
12.5.3 计算排列因子
12.5.4 实现辐射度算法
12.6 全局光照和路径跟踪
12.7 RenderMan
12.8 并行绘制
12.8.1 sort-middle绘制方法
12.8.2 sort-last绘制方法
12.8.3 sort-first绘制方法
12.9 GPU硬件实现
12.10 隐函数和等高线图
12.10.1 步进方格
12.10.2 步进三角形
12.11 体绘制
12.11.1 体数据集
12.11.2 隐函数的可视化
12.12 等值面与步进立方体
12.13 步进四面体
12.14 网格简化
12.15 直接体绘制
12.15.1 指定颜色和透明度
12.15.2 抛雪球算法
12.15.3 体光线跟踪
12.15.4 基于纹理映射的体绘制
12.16 基于图像的绘制
小结和注释
建议阅读资料
习题
附录A 初始化着色器
附录B 空间
附录C 矩阵
附录D 采样与走样
参考文献
封面图: