新書推薦:
《
算法图解(第2版)
》
售價:HK$
78.2
《
科学的奇幻之旅
》
售價:HK$
77.3
《
画艺循谱:晚明的画谱与消闲
》
售價:HK$
143.4
《
新民说·现实政治史:从马基雅维利到基辛格
》
售價:HK$
99.7
《
宽容是件奢侈品(人生360度·一分钟经典故事)
》
售價:HK$
44.6
《
甲骨拼合六集
》
售價:HK$
333.8
《
视觉美食家:商业摄影实战与创意解析
》
售價:HK$
132.2
《
中国经济发展的新阶段:机会与选择
》
售價:HK$
99.7
|
內容簡介: |
本书是计算机图形学领域的经典著作,系统全面地介绍了计算机图形学领域的关键概念、算法、技术和应用。本书先介绍了如何创建二维和三维图像,接下来介绍了更为广泛的话题,包括图像表示和操纵、图像和信号处理、图像的缩放、纹理和纹理映射、交互技术、曲线分割、曲面分割、形状的隐式表示、网格、光、材料和散射、颜色、光传输、概率和蒙特卡洛集成、动画、空间数据结构、现代图形学硬件等内容。
|
關於作者: |
第17章 图像表示与操作1
17.1 引言1
17.2 什么是图像1
17.2.1 一幅图像存储的信息2
17.3 图像文件格式2
17.3.1 选择图像格式3
17.4 图像合成4
17.4.1 图像合成中像素的含义5
17.4.2 计算U over V5
17.4.3 简化合成6出版者的话
译者序
前言
作者简介
第17章 图像表示与操作1
17.1 引言1
17.2 什么是图像1
17.2.1 一幅图像存储的信息2
17.3 图像文件格式2
17.3.1 选择图像格式3
17.4 图像合成4
17.4.1 图像合成中像素的含义5
17.4.2 计算U over V5
17.4.3 简化合成6
17.4.4 其他合成运算6
17.4.5 物理单位和合成7
17.5 其他图像类型7
17.5.1 术语8
17.6 MIP图8
17.7 讨论和延伸阅读9
17.8 练习10
第18章 图像和信号处理11
18.1 引言11
18.1.1 概述11
18.1.2 重要的术语、假设和概念13
18.2 历史动因14
18.3 卷积17
18.4 卷积的性质19
18.5 卷积的计算20
18.6 重建21
18.7 函数类21
18.8 采样22
18.9 数学考虑23
18.9.1 基于频率的合成与分析25
18.10 傅里叶变换的定义28
18.11 在一个区间上的函数的傅里叶变换28
18.11.1 采样和区间上的带宽限制30
18.12 推广到更大的区间和整个R上31
18.13 傅里叶变换的例子32
18.13.1 基本例子32
18.13.2 盒函数的变换是sinc函数32
18.13.3 区间上的例子34
18.14 采样的近似34
18.15 涉及极限的例子35
18.15.1 窄盒函数和delta函数35
18.15.2 梳子函数及其变换35
18.16 傅里叶逆变换36
18.17 傅里叶变换的性质36
18.18 应用37
18.18.1 带宽限制37
18.18.2 在频谱中解释复制39
18.19 重建和带宽限制40
18.20 再谈走样43
18.21 讨论和延伸阅读44
18.22 练习47第19章 图像缩放48
19.1 引言48
19.2 图像放大49
19.3 图像缩小51
19.4 算法实用化52
19.5 有限支撑近似54
19.5.1 实用的带限函数56
19.6 其他图像操作和效率56
19.7 讨论和延伸阅读58
19.8 练习59
第20章 纹理与纹理映射60
20.1 引言60
20.2 各种纹理映射61
20.2.1 环境映射62
20.2.2 凹凸映射62
20.2.3 轮廓绘制63
20.3 根据参数化构建切向量64
20.4 纹理图的取值范围65
20.5 确定纹理坐标66
20.6 应用实例69
20.7 采样、走样、滤波以及重构69
20.8 纹理合成71
20.8.1 基于傅里叶变换的纹理合成71
20.8.2 Perlin噪声71
20.8.3 反应扩散纹理73
20.9 数据驱动的纹理合成74
20.10 讨论和延伸阅读76
20.11 练习77第21章 交互技术79
21.1 引言79
21.2 用户界面与计算机图形学79
21.2.1 一般规则82
21.2.2 交互事件处理84
21.3 二维操作的多触点交互85
21.3.1 问题定义86
21.3.2 构建程序86
21.3.3 交互器87
21.4 三维空间中基于鼠标的物体操作90
21.4.1 跟踪球界面90
21.4.2 弧球界面93
21.5 基于鼠标的相机操作:Unicam94
21.5.1 平移94
21.5.2 旋转95
21.5.3 附加操作96
21.5.4 评估96
21.6 选择最佳界面96
21.7 一些界面实例96
21.7.1 第一人称射击游戏控制96
21.7.2 3ds Max变换小工具97
21.7.3 Photoshop的自由变换模式97
21.7.4 Chateau98
21.7.5 Teddy99
21.7.6 Grabcut与通过笔画的选择99
21.8 讨论和延伸阅读100
21.9 练习102
第22章 样条曲线和细分曲线104
22.1 引言104
22.2 基本多项式曲线104
22.3 两条曲线间的拟合曲线段:Hermite曲线104
22.3.1 Bzier曲线106
22.4 曲线拼接与CatmullRom样条107
22.4.1 CatmullRom样条的推广109
22.4.2 CatmullRom样条的应用110
22.5 三次B样条110
22.5.1 其他B样条111
22.6 细分曲线112
22.7 讨论和延伸阅读113
22.8 练习113
第23章 样条曲面和细分曲面114
23.1 引言114
23.2 Bzier曲面片114
23.3 CatmullClark细分曲面116
23.4 细分曲面造型119
23.5 讨论和延伸阅读120
第24章 形状的隐式表示121
24.1 引言121
24.2 隐式曲线121
24.3 隐式曲面124
24.4 表示隐函数125
24.4.1 插值方法125
24.4.2 样条曲线126
24.4.3 数学模型及采样隐式表示127
24.5 隐式函数的其他表示127
24.6 转换成多面体网格128
24.6.1 移动立方体131
24.7 多面体网格到隐式表示的转换132
24.8 纹理隐式模型132
24.8.1 模型变换和纹理132
24.9 光线跟踪隐式曲面133
24.10 动画中的隐式形状133
24.11 讨论和延伸阅读134
24.12 练习135
第25章 网格136
25.1 引言136
25.2 网格拓扑137
25.2.1 表面三角化和有边界表面138
25.2.2 计算和存储邻接关系139
25.2.3 更多网格术语141
25.2.4 网格嵌入和网格拓扑142
25.3 网格几何143
25.3.1 网格含义144
25.4 细节层次145
25.4.1 渐进式网格148
25.4.2 其他网格简化途径151
25.5 网格应用1:移动立方体算法、网格修复、网格优化151
25.5.1 移动立方体算法的变化形式151
25.5.2 网格修复153
25.5.3 差分或拉普拉斯坐标系154
25.5.4 拉普拉斯坐标的应用156
25.6 网格应用2:变形传递和三角形排序优化158
25.6.1 变形传递158
25.6.2 有利于提高硬件效率的三角形重排序161
25.7 讨论和延伸阅读163
25.8 练习164
第26章 光165
26.1 引言165
26.2 光的物理学原理165
26.3 微观角度166
26.4 光的波动性169
26.4.1 衍射170
26.4.2 偏振171
26.4.3 光在界面的偏折172
26.5 菲涅耳定律和偏振174
26.5.1 辐射度计算与非偏振形式的菲涅耳方程175
26.6 将光建模为连续流176
26.6.1 概率密度的简单介绍177
26.6.2 进一步对光进行建模178
26.6.3 角度和立体角178
26.6.4 计算立体角180
26.6.5 一个重要的变量置换182
26.7 对光的度量184
26.7.1 辐射术语185
26.7.2 辐射度185
26.7.3 两个辐射度计算的例子186
26.7.4 辐射照度187
26.7.5 辐射出射度189
26.7.6 辐射功率或辐射通量189
26.8 其他度量190
26.9 导数的方法190
26.10 反射率191
26.10.1 相关项193
26.10.2 镜子、玻璃、互易性和BRDF194
26.10.3 L的不同写法195
26.11 讨论和延伸阅读195
26.12 练习196
第27章 材质和散射198
27.1 引言198
27.2 物体级散射198
27.3 表面散射199
27.3.1 脉冲现象199
27.3.2 散射模型的种类199
27.3.3 散射的物理约束200
27.4 散射类型200
27.5 基于经验和现象的散射模型204
27.5.1 镜面散射204
27.5.2 朗伯反射204
27.5.3 Phong和BlinnPhong模型206
27.5.4 Lafortune模型208
27.5.5 采样209
27.6 基于测量的模型209
27.7 镜面反射和漫反射的物理模型210
27.8 基于物理的散射模型210
27.8.1 重谈菲涅耳方程组211
27.8.2 TorranceSparrow模型212
27.8.3 CookTorrance模型214
27.8.4 OrenNayar模型215
27.8.5 波动理论模型216
27.9 表达形式的选择216
27.10 评估标准217
27.11 沿表面的变化217
27.12 对用户的适用性218
27.13 更复杂的散射218
27.13.1 参与介质218
27.13.2 次表面散射220
27.14 材质模型的软件接口221
27.15 讨论和延伸阅读222
27.16 练习223
第28章 颜色225
28.1 引言225
28.1.1 颜色的含义225
28.2 光的光谱分布226
28.3 颜色感知现象和眼睛生理学227
28.4 颜色的感知229
28.4.1 亮度感知229
28.5 颜色描述233
28.6 关于颜色的传统认识235
28.6.1 原色235
28.6.2 紫色并不是真正的颜色236
28.6.3 物体具有颜色,在白光下即可看出236
28.6.4 蓝色和绿色合成青色237
28.6.5 颜色就是RGB237
28.7 颜色感知的长处和短处237
28.8 标准的颜色描述238
28.8.1 CIE颜色描述238
28.8.2 色度图的应用241
28.9 感知颜色空间242
28.9.1 其他242
28.10 阶段小结243
28.11 白色244
28.12 亮度编码、幂指数以及矫正244
28.13 描述颜色245
28.13.1 RGB颜色模型246
28.14 CMY和CMYK颜色模型248
28.15 YIQ颜色模型248
28.16 视频标准249
28.17 HSV和HLS250
28.17.1 颜色选择250
28.17.2 调色板250
28.18 颜色插值251
28.19 计算机图形学中对颜色的使用252
28.20 讨论和延伸阅读253
28.21 练习253
第29章 光线传播255
29.1 引言255
29.2 光线传播概述255
29.2.1 绘制方程(第一种类型)257
29.3 略做前瞻258
29.4 一般散射的绘制方程260
29.4.1 度量方程261
29.5 再谈散射262
29.6 实例263
29.7 求解绘
|
目錄:
|
出版者的话
译者序
前言
作者简介
第17章 图像表示与操作1
17.1 引言1
17.2 什么是图像1
17.2.1 一幅图像存储的信息2
17.3 图像文件格式2
17.3.1 选择图像格式3
17.4 图像合成4
17.4.1 图像合成中像素的含义5
17.4.2 计算U over V5
17.4.3 简化合成6
17.4.4 其他合成运算6
17.4.5 物理单位和合成7
17.5 其他图像类型7
17.5.1 术语8
17.6 MIP图8
17.7 讨论和延伸阅读9
17.8 练习10
第18章 图像和信号处理11
18.1 引言11
18.1.1 概述11
18.1.2 重要的术语、假设和概念13
18.2 历史动因14
18.3 卷积17
18.4 卷积的性质19
18.5 卷积的计算20
18.6 重建21
18.7 函数类21
18.8 采样22
18.9 数学考虑23
18.9.1 基于频率的合成与分析25
18.10 傅里叶变换的定义28
18.11 在一个区间上的函数的傅里叶变换28
18.11.1 采样和区间上的带宽限制30
18.12 推广到更大的区间和整个R上31
18.13 傅里叶变换的例子32
18.13.1 基本例子32
18.13.2 盒函数的变换是sinc函数32
18.13.3 区间上的例子34
18.14 采样的近似34
18.15 涉及极限的例子35
18.15.1 窄盒函数和delta函数35
18.15.2 梳子函数及其变换35
18.16 傅里叶逆变换36
18.17 傅里叶变换的性质36
18.18 应用37
18.18.1 带宽限制37
18.18.2 在频谱中解释复制39
18.19 重建和带宽限制40
18.20 再谈走样43
18.21 讨论和延伸阅读44
18.22 练习47第19章 图像缩放48
19.1 引言48
19.2 图像放大49
19.3 图像缩小51
19.4 算法实用化52
19.5 有限支撑近似54
19.5.1 实用的带限函数56
19.6 其他图像操作和效率56
19.7 讨论和延伸阅读58
19.8 练习59
第20章 纹理与纹理映射60
20.1 引言60
20.2 各种纹理映射61
20.2.1 环境映射62
20.2.2 凹凸映射62
20.2.3 轮廓绘制63
20.3 根据参数化构建切向量64
20.4 纹理图的取值范围65
20.5 确定纹理坐标66
20.6 应用实例69
20.7 采样、走样、滤波以及重构69
20.8 纹理合成71
20.8.1 基于傅里叶变换的纹理合成71
20.8.2 Perlin噪声71
20.8.3 反应扩散纹理73
20.9 数据驱动的纹理合成74
20.10 讨论和延伸阅读76
20.11 练习77第21章 交互技术79
21.1 引言79
21.2 用户界面与计算机图形学79
21.2.1 一般规则82
21.2.2 交互事件处理84
21.3 二维操作的多触点交互85
21.3.1 问题定义86
21.3.2 构建程序86
21.3.3 交互器87
21.4 三维空间中基于鼠标的物体操作90
21.4.1 跟踪球界面90
21.4.2 弧球界面93
21.5 基于鼠标的相机操作:Unicam94
21.5.1 平移94
21.5.2 旋转95
21.5.3 附加操作96
21.5.4 评估96
21.6 选择最佳界面96
21.7 一些界面实例96
21.7.1 第一人称射击游戏控制96
21.7.2 3ds Max变换小工具97
21.7.3 Photoshop的自由变换模式97
21.7.4 Chateau98
21.7.5 Teddy99
21.7.6 Grabcut与通过笔画的选择99
21.8 讨论和延伸阅读100
21.9 练习102
第22章 样条曲线和细分曲线104
22.1 引言104
22.2 基本多项式曲线104
22.3 两条曲线间的拟合曲线段:Hermite曲线104
22.3.1 Bzier曲线106
22.4 曲线拼接与CatmullRom样条107
22.4.1 CatmullRom样条的推广109
22.4.2 CatmullRom样条的应用110
22.5 三次B样条110
22.5.1 其他B样条111
22.6 细分曲线112
22.7 讨论和延伸阅读113
22.8 练习113
第23章 样条曲面和细分曲面114
23.1 引言114
23.2 Bzier曲面片114
23.3 CatmullClark细分曲面116
23.4 细分曲面造型119
23.5 讨论和延伸阅读120
第24章 形状的隐式表示121
24.1 引言121
24.2 隐式曲线121
24.3 隐式曲面124
24.4 表示隐函数125
24.4.1 插值方法125
24.4.2 样条曲线126
24.4.3 数学模型及采样隐式表示127
24.5 隐式函数的其他表示127
24.6 转换成多面体网格128
24.6.1 移动立方体131
24.7 多面体网格到隐式表示的转换132
24.8 纹理隐式模型132
24.8.1 模型变换和纹理132
24.9 光线跟踪隐式曲面133
24.10 动画中的隐式形状133
24.11 讨论和延伸阅读134
24.12 练习135
第25章 网格136
25.1 引言136
25.2 网格拓扑137
25.2.1 表面三角化和有边界表面138
25.2.2 计算和存储邻接关系139
25.2.3 更多网格术语141
25.2.4 网格嵌入和网格拓扑142
25.3 网格几何143
25.3.1 网格含义144
25.4 细节层次145
25.4.1 渐进式网格148
25.4.2 其他网格简化途径151
25.5 网格应用1:移动立方体算法、网格修复、网格优化151
25.5.1 移动立方体算法的变化形式151
25.5.2 网格修复153
25.5.3 差分或拉普拉斯坐标系154
25.5.4 拉普拉斯坐标的应用156
25.6 网格应用2:变形传递和三角形排序优化158
25.6.1 变形传递158
25.6.2 有利于提高硬件效率的三角形重排序161
25.7 讨论和延伸阅读163
25.8 练习164
第26章 光165
26.1 引言165
26.2 光的物理学原理165
26.3 微观角度166
26.4 光的波动性169
26.4.1 衍射170
26.4.2 偏振171
26.4.3 光在界面的偏折172
26.5 菲涅耳定律和偏振174
26.5.1 辐射度计算与非偏振形式的菲涅耳方程175
26.6 将光建模为连续流176
26.6.1 概率密度的简单介绍177
26.6.2 进一步对光进行建模178
26.6.3 角度和立体角178
26.6.4 计算立体角180
26.6.5 一个重要的变量置换182
26.7 对光的度量184
26.7.1 辐射术语185
26.7.2 辐射度185
26.7.3 两个辐射度计算的例子186
26.7.4 辐射照度187
26.7.5 辐射出射度189
26.7.6 辐射功率或辐射通量189
26.8 其他度量190
26.9 导数的方法190
26.10 反射率191
26.10.1 相关项193
26.10.2 镜子、玻璃、互易性和BRDF194
26.10.3 L的不同写法195
26.11 讨论和延伸阅读195
26.12 练习196
第27章 材质和散射198
27.1 引言198
27.2 物体级散射198
27.3 表面散射199
27.3.1 脉冲现象199
27.3.2 散射模型的种类199
27.3.3 散射的物理约束200
27.4 散射类型200
27.5 基于经验和现象的散射模型204
27.5.1 镜面散射204
27.5.2 朗伯反射204
27.5.3 Phong和BlinnPhong模型206
27.5.4 Lafortune模型208
27.5.5 采样209
27.6 基于测量的模型209
27.7 镜面反射和漫反射的物理模型210
27.8 基于物理的散射模型210
27.8.1 重谈菲涅耳方程组211
27.8.2 TorranceSparrow模型212
27.8.3 CookTorrance模型214
27.8.4 OrenNayar模型215
27.8.5 波动理论模型216
27.9 表达形式的选择216
27.10 评估标准217
27.11 沿表面的变化217
27.12 对用户的适用性218
27.13 更复杂的散射218
27.13.1 参与介质218
27.13.2 次表面散射220
27.14 材质模型的软件接口221
27.15 讨论和延伸阅读222
27.16 练习223
第28章 颜色225
28.1 引言225
28.1.1 颜色的含义225
28.2 光的光谱分布226
28.3 颜色感知现象和眼睛生理学227
28.4 颜色的感知229
28.4.1 亮度感知229
28.5 颜色描述233
28.6 关于颜色的传统认识235
28.6.1 原色235
28.6.2 紫色并不是真正的颜色236
28.6.3 物体具有颜色,在白光下即可看出236
28.6.4 蓝色和绿色合成青色237
28.6.5 颜色就是RGB237
28.7 颜色感知的长处和短处237
28.8 标准的颜色描述238
28.8.1 CIE颜色描述238
28.8.2 色度图的应用241
28.9 感知颜色空间242
28.9.1 其他242
28.10 阶段小结243
28.11 白色244
28.12 亮度编码、幂指数以及矫正244
28.13 描述颜色245
28.13.1 RGB颜色模型246
28.14 CMY和CMYK颜色模型248
28.15 YIQ颜色模型248
28.16 视频标准249
28.17 HSV和HLS250
28.17.1 颜色选择250
28.17.2 调色板250
28.18 颜色插值251
28.19 计算机图形学中对颜色的使用252
28.20 讨论和延伸阅读253
28.21 练习253
第29章 光线传播255
29.1 引言255
29.2 光线传播概述255
29.2.1 绘制方程(第一种类型)257
29.3 略做前瞻258
29.4 一般散射的绘制方程260
29.4.1 度量方程261
29.5 再谈散射262
29.6 实例263
29.7 求解绘
|
內容試閱:
|
本书面向学生、研究人员和从业人员,介绍计算机图形学的许多重要概念和思想。其中一些概念读者并不陌生,它们早已出现在广为流行的学术出版物、技术报告、教科书和行业期刊中。在某个概念出现一段时间后再将其写入教科书的好处是,人们可以更充分地理解它的长远影响并将其置于一个更大的背景中予以领悟。本书将尽可能详细地介绍这些概念(当然也略过了一些曾经热门但现在已不再重要的概念),并以一种清晰、流畅的风格将它们呈现给初学者。
本书属于第二代图形学教科书:我们并不将之前的所有工作全部认定为天然合理的,而是按今天的理解重新审视它们,进而更新其原有的陈述方式。
甚至一些最基本的问题也可能变得非常棘手。举例来说,假如要设计一个适用于低光照环境(如电影院的暗环境)的程序。显然,我们不能采用亮屏幕显示器,这意味着在显示程序中采用亮度对比来区分环境中的不同对象不再适宜。也许可以改用彩色显示,但遗憾的是,在低光照环境中人们对颜色的感知同样有所降低,某些颜色的文字要比其他颜色更易读。在这种情况下,光标是否仍容易被用户看到呢?一种简单的应对方式是利用人眼对运动的感知能力,让光标持续抖动。于是,一个看似简单的问题最后涉及交互界面设计、颜色理论以及人类感知等领域。
尽管上述例子很简单,但仍隐含了某些假设:采用图形方式输出(而不是通过触觉或封闭良好的耳机来输出);显示设备既非常规的影院屏幕,也不是头盔显示器。其中也包含了一些显式的假设,例如采用光标(也有一些用户界面不使用光标)。上述每一种假设都是对用户界面的一种选择。
遗憾的是,这种多方面内容相互交织的关系使得我们不可能完全按照某种顺序来讲述各主题,而且还能很好地介绍它们的研究动因和背景,也就是说,这些主题无法以线性方式展开。也许,我们可以先介绍它们涉及的所有相关的数学、感知理论或其他内容,总之,将较为抽象的内容和主题放在前面介绍,然后再介绍图形学应用。尽管这种内容组织方式可能便于参考(读者很容易找到讲述一般化向量叉积的有关章节),但对一本教科书而言,其效果并不好,原因是那些涉及主题研究动因的应用都要等到书的最后才会介绍。另一种展开方式是采取案例研究的思路,分别介绍各种不同的任务(难度不断增大),然后根据问题的需要讲述相关内容。在某些情况下,这确实是一种自然的内容演绎方式,但难以对各主题做出整体性、结构化的呈现。本书是这两种方式的折中:开始部分介绍了广泛使用的数学知识和常规的符号标记方式,然后逐个主题展开内容,根据需要补充介绍必要的数学工具。熟悉数学的读者完全可以跳过开始部分而不致错过任何图形学知识,其他人则可从这些章节中获益良多,教师授课时可根据需要对其进行取舍。基于主题的章节安排方式可能会导致内容上的重复,例如,本书从不同的细节层次对图形流水线进行了多次讨论。与其让读者回头参考之前的章节,有时我们会再次陈述部分内容,使对该问题的讨论更为流畅。毕竟让读者返回500页之前去查看一幅图并非令人惬意的事。
对本教材的作者来说,另一个挑战是选材的广度。本书的第1版确实覆盖了当时图形学出版物中的大部分内容,第2版至少也约略提到了其中大部分的研究工作。本版教材不再追求内容的覆盖度,理由很简单:当本书第2版出版时,我们一只手就能拿起SIGGRAPH会议的全部论文集(这些论文几乎包含了图形学领域的代表性研究);如今,SIGGRAPH会议的全部论文集(仅仅是许多图形学出版物中的一种)叠在一起高达数米。即使是电子版的教材也无法将全部内容塞进1000页中。本书这一版旨在为读者指明在哪里可以找到当今的大部分SIGGRAPH论文。下面是几点说明:
●第一,计算机图形学与计算机视觉的交叉面越来越大,但这并不能构成让我们将本书写成计算机视觉教材的理由,尽管一些有该领域丰富知识的人已经这样做了。
●第二,计算机图形学涉及编程,尽管有许多大型图形学应用项目,但本书并没有试图讲授编程和软件工程。当然,在书中我们也会简要讨论一些专门针对图形学的编程方法(尤其是排错)。
●第三,许多图形学应用都提供了用户界面。在编写本书时,大多数界面均基于Windows操作系统,采用菜单和鼠标进行交互。不过基于触觉的交互界面正变得越来越常见。交互界面的研究曾经是图形学的一部分,但如今已成为一个独立的领域(尽管它仍和图形学有很大的交叉)。我们假定读者在编写含用户界面的程序方面已具备了一些经验,因此本书将不再对它们做深入讨论(除了其实现过程与图形学密切关联的3D界面外)。
毋庸置疑,图形学领域的研究论文区别很大:有些涉及很多的数学表述;有些介绍的是一个大规模的系统,涉及各种复杂的工程因素的权衡;还有些涉及物理学、颜色理论、地形学、摄影学、化学、动物学等各个学科的知识。我们的目标是让读者领会图形学在这些论文中所起的作用,而其他的相关知识则需要读者在课外自行学习。
历史上的方法
在历史上,图形学大多为一些面向当时急需解决的问题的专门方法。这么说并非对那些曾经使用这些方法的人有所不敬,他们手头有任务,必须想办法完成。其中一些解决方法中包含了重要的思想,而另一些解决方法不过是为了完成任务。但这些方法无疑对后面图形学的发展产生了影响。举例来说,大多数图形系统中采用的图像合成模型均假定图像中存储的颜色可以线性方式融合。但实践中,图像中存储的颜色值与其显示的光亮度之间却呈非线性关系,因此颜色的线性组合并不对应光亮度的线性组合。两者之间的差别一直到摄影工作室试图将现实场景的照片与计算机生成的图像合成时才为人们所注意,即上述图像合成方式并不能生成正确的结果。此外,尽管一些早期方法描述十分原则化,但其关联的程序却对实现的硬件做了一些假设,几年后,这些假设不再适用,当读者看到这些实现细节时会说:这不是过时的东西吗,与我们毫不相关啊!于是,就忽略了这些研究工作中某些仍旧重要的思想。更多的时候,研究人员只是在重新利用其他学科运用多年的那些概念和方法。
因此,我们不打算按照图形学发展的年代顺序来讲述。正如物理学教程并不从亚里士多德的动力学讲起,而是直接介绍牛顿动力学(更好的是一开始就讲述牛顿动力学系统的局限性,将平台搭建在量子力学的基础上),我们将直接从对相关问题的最新理解入手,当然也会介绍与之相关的各种传统研究思路。同时,我们还会指出这些思路的源头(可能不为大家所熟悉),例如,关于3D多边形法向量的Newell公式即19世纪初期的Grassmann公式。我们希望,指出这些参考源头能增加读者对许多早已开发并有望应用于图形学的方法的了解。
教学方法
日常生活中图形学最令人瞩目的应用是视频游戏中的3D形象以及娱乐行业和广告中的特效。然而,我们每天在家庭电脑和手机中的交互也都离不开计算机图形学。这些界面之所以不那么显眼也许是由于它们太成功了:其实,最好的界面会让你完全忘记它的存在。虽然2D图形学要比3D图形学简单这句话听上去很诱人,但是3D图形学不过是一个稍复杂的版本而已。2D图形学中的许多问题,诸如在方形发光单元(像素)组成的屏幕上如何完美地显示一幅图像,或者如何构建高效且功能强大的界面等,都和在绘制3D场景图像时遇到的问题一样困难。而2D图形学中通常采用的简单模型在怎样完美地表示颜色和形状等方面也可能对学生造成误导。因此,我们将2D和3D图形学的讲述交织在一起,分析和讨论两者共同的敏感问题。
VII本书设置黑盒的层次与众不同。几乎每一本计算机科学的书都需要选择一个合适的层次来讲述计算机的有关内容,该层次应便于读者理解和掌握。在图形学教科书中,我们同样需要选择一个读者将会遇到的图形学系统。也许,在输入某些指令后,计算机的硬件和软件就能在屏幕上生成一个彩色三角形。但这一切是怎样发生的?其中的细节与图形学的大部分内容并无关联。举例来说,假如你让图形系统绘制一个位于屏幕可显示区域下方的红色三角形,将会发生什么?是先确定那些应置为红色的像素的位置然后因其不在屏幕显示区域内而将其抛弃?还是图形系统尚未开始计算任何像素值之前因发现该三角形位于屏幕之外而终止后面的过程?从某种意义上说,除非你正在设计一块图形卡,否则上述问题并不那么重要,它并非一个图形系统用户所能控制的。因此,我们假定图形系统能够显示像素的值,或画出三角形和直线,而不考虑该过程是怎样实现的。具体实现的细节将在光栅化和图形硬件的相关章节中介绍,但因其大都超出了我们的控制范围,所以诸如裁剪、直线反走样、光栅化算法等内容均将推迟到其后面章节予以介绍。
本书教学方法的另一点是试图展示相关的思想和技术是怎样浮现出来的。这样做无疑会增长篇幅,但我们希望会有所帮助。当学生需要独立推导自己的算法时,他们遇到过的研究案例可能会为当前问题提供解决思路。
我们相信,学习图形学最好的途径是先学习其背后的数学。与直接跨入图形学应用相比,先学习较为抽象的数学确实会延长你开始学习最初的几个图形算法所需的时间,但这个代价是一次性的。等你学习到第10个算法时,先前的投入将会完全得到补偿,因为你会发现新的方法组合了之前已经学过的许多内容。
当然,阅读本书表明你有兴趣编写绘图程序。因此,本书一开始就引入多个题目并直接给出解决方案,然后再回过头仔细讨论更广泛的数学背景。书中大部分篇幅都集中于其后面的处理上。在打下必要的数学基础后,我们将结束上述题目,延伸到其他的相关问题并给出求解思路。由于本书聚焦于基础性的原则,因此并未提供这些方法的实现细节。一旦读者领会了基础原则,每一个求解思路的具体算法就会了然于胸,并将具有足够的知识来阅读和理解其原始参考文献中给出的论述,而不是基于我们的转述。我们能做的是采用更为现代化的形式来介绍那些早期的算法,当读者回头阅读原始文献时,能比较容易理解文献中词汇的含义及其表达方式。
编程实践
图形学是一门需要自己动手实践的学科。由于图形产业为观众提供的是视觉类信息以及相关的交互手段,图形工具也经常用来为新开发的图形算法排错。但这样做需具备编写图形程序的能力。如今已有许多不同的方法可在计算机上生
|
|