本书是作者多年来教学与科研工作的总结,采用自顶向下的结构进行讲解,涵盖了基于WebGL编程工具的交互式图形编程、三维可编程绘制流水线、变换与观察、光照与明暗绘制、曲线曲面建模等基本的计算机图形学内容,以及离散技术、层级建模、过程建模、光线跟踪、并行绘制和体绘制等高级内容。并为读者进一步深入学习和研究,在每章后面提供了相关的建议阅读资料。
......(更多)
Edward Angel是新墨西哥大学(UNM)计算机科学的退休教授,并担任过艺术、技术和科学实验室(ARTS Lab)的主任。直到2007年7月,他一直是UNM的计算机科学、电子与计算机工程、媒体艺术教授。Angel于1964年在加州理工大学获得学士学位,并于1968年在南加州大学获得博士学位。他曾任职于加州大学伯克利分校、南加州大学和罗切斯特大学。Angel目前的研究领域是计算机图形学及科学可视化、虚拟现实和大规模并行计算等。
......(更多)
第1章图形系统和模型
1.1计算机图形学的应用
1.1.1信息的显示
1.1.2设计
1.1.3仿真和动画
1.1.4用户界面
1.2图形系统
1.2.1像素和帧缓存
1.2.2CPU与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使用WebGLAPI绘制的一系列图像
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.1Sierpinski镂垫
2.2编写二维图形应用程序
2.3WebGL应用程序编程接口
2.3.1图形函数
2.3.2图形绘制流水线和状态机
2.3.3OpenGL和WebGL
2.3.4WebGL接口
2.3.5坐标系
2.4图元和属性
2.4.1多边形的基本概念
2.4.2WebGL中的多边形
2.4.3利用多边形近似球面
2.4.4三角剖分
2.4.5文本
2.4.6曲线和曲面对象
2.4.7属性
2.5颜色
2.5.1RGB颜色
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.8Sierpinski镂垫绘制程序
2.8.1向GPU发送数据
2.8.2绘制Sierpinski镂垫的点数据
2.8.3顶点着色器
2.8.4片元着色器
2.8.5组合代码段
2.8.6initShaders()函数
2.8.7init()函数
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.4WebGL中的标架
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.11WebGL中的变换矩阵
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.3lookAt函数
5.3.4其他观察API
5.4平行投影
5.4.1正投影
5.4.2WebGL中的平行投影
5.4.3投影的规范化
5.4.4正投影变换矩阵
5.4.5斜投影
5.4.6交互式观察立方体
5.5透视投影
5.6WebGL中的透视投影
5.7透视投影变换矩阵
5.7.1透视投影的规范化
5.7.2WebGL中的透视投影变换
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.3Phong反射模型
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.3Phong着色
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.5WebGL的纹理映射
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.3WebGL中图像的融合
7.10.4再探反走样
7.10.5从后向前或从前向后绘制多边形
7.10.6场景反走样和多重采样
7.10.7图像处理
7.10.8其他的多通道绘制方法
7.11GPGPU
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.1Cohen—Sutherland裁剪算法
8.4.2Liang—Barsky裁剪算法
8.5多边形的裁剪
8.6其他图元的裁剪
8.6.1包围盒与包围体
8.6.2曲线、曲面和字符的裁剪
8.6.3帧缓存中的裁剪
8.7三维裁剪
8.8光栅化
8.9Bresenham算法
8.10多边形光栅化算法
8.10.1内外测试法
8.10.2WebGL与凹多边形
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.5z缓存算法
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.1CSG树
9.10.2BSP树
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.5Mandelbrot集
10.9.6Mandelbrot片元着色器
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.5Hermite曲线和曲面
11.5.1Hermite形式
11.5.2几何与参数连续性
11.6Bzier曲线和曲面
11.6.1Bzier曲线
11.6.2Bzier曲面片
11.7三次B样条
11.7.1三次B样条曲线
11.7.2B样条和基函数
11.7.3样条曲面
11.8普通B样条
11.8.1B样条的递归定义
11.8.2均匀样条
11.8.3非均匀B样条
11.8.4NURBS
11.8.5Catmull—Rom样条
11.9曲线和曲面的绘制
11.9.1多项式求值方法
11.9.2递归细分Bzier多项式
11.9.3基于细分算法的其他多项式曲线的绘制
11.9.4细分Bzier曲面
11.10Utah茶壶模型
11.11代数曲面
11.11.1二次曲面
11.11.2使用光线跟踪绘制曲面
11.12曲线和曲面的细分
11.13从数据生成网格
11.13.1回顾高度场
11.13.2Delaunay三角剖分
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.7RenderMan
12.8并行绘制
12.8.1sort—middle绘制方法
12.8.2sort—last绘制方法
12.8.3sort—first绘制方法
12.9GPU硬件实现
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采样与走样
参考文献
......(更多)
Clipping must be done on a primitive-by-primitive basis rather than on a vertexby-vertex basis
增加了对WebGL、Delaunay 三角剖分、体绘制、点云等内容的介绍
OpenGL中的6个标架(局部坐标系): 对象/Model 世界 眼/照相机 裁减 规范化的设备 窗口/屏幕
......(更多)