
| 本书通过最能代表技术发展状况的示例综合介绍了计算机图形学方面的原则和技巧,涉及图形图像处理、图形生成算法、语言编程、色彩理论等多个方面。内容翔实、结构清晰、实用性强,反映了计算机图形领域的诸多前沿信息。 |
| F.S.Hill,JR.是马赛诸塞邛可默斯特大学的电子和计算机工程教授。他于1968年在耶鲁大学获得物理学博士学位。在贝尔电话实验室工作了3年,致力于数字数据传输的研究。1970年,进人大学工作。F.S.Hill,JR.著有多篇论文,涉及信号处理、通信和计算机图形领域。他与人合著了一本工程学方面的基础性图书,并且编著了他的第二本图形学著作。F.S.Hill,JR曾数次获得卓越教学奖。 |
| 第1章 计算机图形学导言1 1.1 什么是计算机图形1 1.2 计算机生成的图片应用 在哪些地方3 1.2.1 艺术、娱乐以及出版3 1.2.2 计算机图形和图像处理4 1.2.3 监视过程5 1.2.4 显示模拟6 1.2.5 计算机辅助设计7 1.2.6 科学分析和可视化7 1.3 在计算机图形中创建的图片元素10 1.3.1 折线10 1.3.2 文本12 1.3.3 实心区域13 1.3.4 光栅图像14 1.3.5 灰度阴影的呈现以及 光栅图像中的颜色18 1.4 图像显示设备21 1.4.1 绘线型显示器21 1.4.2 光栅显示器22 1.4.3 索引颜色和查找表格26 1.4.4 其他的光栅显示设备29 1.4.5 硬拷贝光栅设备30 1.5 图形输入原语和设备31 1.5.1 输入图形原语的类型31 1.5.2 物理输入设备的类型32 1.6 小结34 1.7 进一步阅读34 第2章 绘制图片入门36 2.1 着手创建图片36 2.1.1 设备无关编程和OpenGL38 2.1.2 基于窗口的编程38 2.1.3 打开一个绘图窗口40 2.2 绘制基本图形原语41 绘制点丛44 2.3 绘制线条画50 2.3.1 绘制折线和多边形51 2.3.2 使用moveto( )和 lineto( )绘制线条55 2.3.3 绘制校准长方形56 2.3.4 校准长方形的高宽比57 2.3.5 填充多边形59 2.3.6 OpenGL中的其他 图形原语60 2.4 使用鼠标和键盘的简单交互作用61 2.4.1 鼠标交互作用61 2.4.2 键盘交互作用64 2.5 小结65 2.6 案例分析66 案例分析2.1?伪随机点的集合66 案例分析2.2?迭代函数系统 导言68 案例分析2.3?资金分割率和 其他的宝石71 案例分析2.4?建立并使用折线 文件73 案例分析2.5?线条和多边形的 点画法74 案例分析2.6?折线编辑器75 案例分析2.7?建立并运行迷阵76 2.7 进一步阅读78 第3章 更多绘图工具79 3.1 简介80 3.2 世界窗口和视口80 3.2.1 从窗口到视口的映射82 3.2.2 自动设定窗口和视口91 3.3 裁剪线94 3.3.1 裁剪线段94 3.3.2 Cohen-Sutherland裁剪 算法95 3.4 开发Canvas类98 3.4.1 一些有用的支持类99 3.4.2 类Canvas的声明100 3.4.3 类Canvas的实现方法101 3.5 相对绘图例程103 3.5.1 开发moveRel( )和 lineRel( )104 3.5.2 龟纹绘图历程105 3.6 基于规则多边形的图形109 3.6.1 规则多边形109 3.6.2 n-Gon的变分(Variation)111 3.7 绘制圆和圆弧115 3.7.1 绘制圆115 3.7.2 绘制圆弧115 3.8 对曲线使用参数形式119 3.8.1 曲线的参数形式119 3.8.2 绘制以参数表示的曲线122 3.8.3 超椭圆(Superellipses)124 3.8.4 极坐标形状125 3.8.5 3D曲线127 3.9 小结128 3.10 案例分析129 案例分析3.1 学习数理逻辑图形 和混沌模拟129 案例分析3.2 在C或者C++中实 现Cohen-Suther- land裁剪器131 案例分析3.3 在Turbo C++中 实现Canvas133 案例分析3.4 绘制圆弧135 案例分析3.5 一些用于物理和 工程中的图形136 案例分析3.6 平铺图案138 案例分析3.7 主旋律的有趣 改变139 案例分析3.8 圆围绕着圆 滚动141 案例分析3.9 超椭圆142 3.11?进一步阅读143 第4章 图形向量工具144 4.1 简介145 4.2 向量147 4.2.1 向量操作148 4.2.2 向量线性组合149 4.2.3 向量的大小;单位向量151 4.3 点积152 4.3.1 点积的性质153 4.3.2 两个向量的夹角154 4.3.3 b·c的符号和正交性154 4.3.4 2D"正交"向量156 4.3.5 正交投影和点到线 的距离158 4.3.6 投影的应用:反射160 4.4 两个向量的叉积161 4.4.1 叉积的几何解释162 4.4.2 求平面的法向量163 4.5 主要几何对象的表示164 4.5.1 坐标系和坐标框架165 4.5.2 点的仿射组合168 4.5.3 两个点的线性插值170 4.5.4 艺术和动画的"插值"171 4.5.5 概述:二次插值、立方 插值和贝济埃曲线173 4.5.6 表示线和平面174 4.6 求两条线段的交点182 直线相交的应用:过三点的圆184 4.7 直线和平面的交点;裁剪186 4.8 多边形相交问题188 4.8.1 处理凸多边形和多面体189 4.8.2 射线与凸多边形的交点 和裁剪问题190 4.8.3 Cyrus-Beck裁剪算法194 4.8.4 任意多边形的裁剪196 4.8.5 更高级的裁剪问题198 4.9 小结198 4.10 案例分析199 案例分析4.1 插值动画199 案例分析4.2 大量的圆200 案例分析4.3 点Q是否在凸多 边形P内部201 案例分析4.4 密室反射(2D射线 跟踪)202 案例分析4.5 Cyrus-Beck 裁剪203 案例分析4.6 用凸多边形裁剪多 边形:Sutherland- Hodgman裁剪203 案例分析4.7 用多边形裁剪多 边形:Weiler- Atherton 裁剪206 案例分析4.8 多边形的布尔 操作208 4.11 进一步阅读210 第5章 对象的变换211 5.1 简介212 5.2 变换导论212 5.2.1 变换点和对象215 5.2.2 仿射变换217 5.2.3 初等2D仿射变换的 几何效果218 5.2.4 仿射变换的逆转223 5.2.5 组合仿射变换224 5.2.6 组合2D变换的例子226 5.2.7 仿射变换的一些 有用特征230 5.3 3D仿射变换235 5.3.1 初等3D变换236 5.3.2 组合3D仿射变换240 5.3.3 组合旋转240 5.3.4 3D仿射变换特征小结245 5.4 改变坐标系246 5.5 在程序中使用仿射变换249 保存CT以备用256 5.6 使用OpenGL绘制3D场景260 5.6.1 观察过程和图形流水线 综述261 5.6.2 一些OpenGL建模和 视角工具264 5.6.3 用OpenGL绘制基本 形状267 5.6.4 从文件中读取场景275 5.7 小结279 5.8 案例分析280 案例分析5.1 用Canvas中的CT 进行自行变换280 案例分析5.2 使用多个旋转绘制图 5.39中的星星280 案例分析5.3 分解2D仿射变换280 案例分析5.4 通用3D错切284 案例分析5.5 绕某条轴旋转:构造 方法286 案例分析5.6 分解3D仿射 变换287 案例分析5.7 用SDL绘制3D 场景289 5.9 进一步阅读289 第6章 使用多边形网格为各种形状建模290 6.1 简介290 6.2 使用多边形网格实体建模简介291 6.2.1 定义多边形网格292 6.2.2 计算法向量294 6.2.3 网格的性质296 6.2.4 为非实体物体建立网格 模型298 6.2.5 在程序中使用网格298 6.3 多面体301 6.3.1 棱柱和对角柱303 6.3.2 柏拉图立体304 6.3.3 其余常见的多面体309 6.4 推挤型形状312 6.4.1 生成棱柱312 6.4.2 推挤棱柱数组:"堆砌 工作"313 6.4.3 带有"扭曲"的推挤315 6.4.4 建立分段推挤形状:管状 物体和蛇形物体316 6.4.5 "离散地"延伸旋转面321 6.5 平滑物体的网格近似323 6.5.1 表面的表示方法323 6.5.2 表面的法向量325 6.5.3 仿射变换的作用326 6.5.4 三种"标准"形状:球面、 圆柱面和圆锥面327 6.5.5 为曲面建立多边形网格331 6.5.6 直纹面333 6.5.7 旋转面338 6.5.8 二次曲面340 6.5.9 超二次曲面344 6.5.10 基于三维曲线的管状 物体346 6.5.11 基于双变量显式函数 的表面346 6.6 小结347 6.7 案例分析348 案例分析6.1 存储在文件中的 网格348 案例分析6.2 Newell方法的 推导349 案例分析6.3 棱柱351 案例分析6.4 棱柱组和推挤 四边形带352 案例分析6.5 基于参数曲线的 管状物体和蛇形 物体353 案例分析6.6 建立离散旋转面354 案例分析6.7 关于边列表和 线框模型354 案例分析6.8 拱形屋顶354 案例分析6.9 关于柏拉图立体355 案例分析6.10 关于阿基米德 立体355 案例分析6.11 二次曲面的代数 表达式355 案例分析6.12 超二次曲面357 案例分析6.13 绘制平滑参数 表面357 案例分析6.14 锥化、扭曲、弯曲 和挤压358 6.8 进一步阅读359 第7章 三维视图360 7.1 简介360 7.2 再次研究照相机361 7.2.1 设置视角范围362 7.2.2 照相机的定位和定向362 7.3 在程序中建立照相机368 移动照相机370 7.4 三维物体的透视投影373 7.4.1 点的透视投影374 7.4.2 直线的透视投影377 7.4.3 把透视法结合到图形 管道中380 7.4.4 对视角范围进行面裁剪387 7.5 生成立体视图393 7.6 投影的分类395 7.6.1 一点透视,两点透视和 三点透视396 7.6.2 平行投影400 7.7 小结406 7.8 案例分析407 案例分析7.1 在场景中移动 照相机407 案例分析7.2 立体视图408 案例分析7.3 生成平行投影408 案例分析7.4 自己产生视图(假定 没有OpenGL可以 使用)408 案例分析7.5 去掉背面以提高 效率408 7.9 进一步阅读410 第8章 渲染表面获得视觉真实感411 8.1 简介411 8.2 明暗处理模型介绍415 8.2.1 计算反射光的几何要素416 8.2.2 计算漫反射分量416 8.2.3 镜面反射418 8.2.4 环境光的作用421 8.2.5 光分量的结合422 8.2.6 添加颜色423 8.2.7 明暗处理和图形管道425 8.2.8 在OpenGL中使用光源426 8.2.9 在OpenGL中使用材质 属性431 8.2.10 对SDL指定的场景进行 明暗处理432 8.3 平面明暗处理方式和平滑明暗 处理方式432 8.3.1 平面明暗处理433 8.3.2 平滑明暗处理434 8.4 去除隐藏面438 深度缓冲区方法438 8.5 给面添加纹理441 8.5.1 把纹理映射到平表面上444 8.5.2 渲染纹理446 8.5.3 纹理改变了什么453 8.5.4 使用OpenGL获得的 纹理示例455 8.5.5 向曲面上环绕纹理460 8.5.6 反射映射464 8.6 为物体添加阴影467 8.6.1 作为纹理的阴影468 8.6.2 利用阴影缓冲区 生成阴影469 8.7 小结471 8.8 案例分析472 案例分析8.1 使用OpenGL生成 有阴影的物体472 案例分析8.2 自己实现图形 管道472 案例分析8.3 添加多边形填充和 深度缓冲区去除 隐藏面473 案例分析8.4 渲染纹理473 案例分析8.5 应用可编程3D 纹理473 案例分析8.6 绘制阴影474 案例分析8.7 扩展SDL使其包括 纹理生成474 8.9 进一步阅读474 第9章 通向无限之路475 9.1 简介476 9.2 分形与自相似性476 9.2.1 曲线的连续细化477 9.2.2 绘制Koch曲线和Koch 雪花478 9.2.3 分形维数480 9.3 字符串产生式和PEANO曲线481 9.3.1 在程序中递归生成字符串 并绘图483 9.3.2 添加分支486 9.4 拼接平面489 9.4.1 单面拼接490 9.4.2 双面拼接492 9.4.3 绘制拼接494 9.4.4 "爬虫"494 9.5 通过迭代函数系统生成图像497 9.5.1 拷贝器试验497 9.5.2 拷贝过程的一些基本 理论499 9.5.3 绘制第k次迭代结果500 9.5.4 混沌游戏501 9.5.5 计算IFS;分形图像压缩504 9.6 MANDELBROT集507 9.6.1 Mandelbrot集和迭代 函数系统508 9.6.2 定义Mandelbrot集511 9.6.3 计算点c是否在Mandelbrot 集内513 9.6.4 绘制Mandelbrot集514 9.6.5 Mandelbrot集的几点性质515 9.7 JULIA集516 9.7.1 充满Julia集Kc516 9.7.2 绘制充满Julia集516 9.7.3 固定点和吸引盆的 几点性质517 9.7.4 Julia集Jc519 9.8 随机分形521 9.8.1 线段的分形化522 9.8.2 控制分形曲线的 频谱密度523 9.9 小结525 9.10 案例分析526 案例分析9.1 绘制字符串 产生式526 案例分析9.2 绘制雪花和 爬虫527 案例分析9.3 混沌游戏529 案例分析9.4 绘制Mandelbrot 集中的轨道529 案例分析9.5 生成Mandelbrot集 的图像530 案例分析9.6 生成Julia集的 图像530 案例分析9.7 非周期性拼接; Penrose拼板530 案例分析9.8 分形化曲线532 案例分析9.9 为分形山建模533 9.11 进一步阅读533 第10章 光栅显示工具534 10.1 简介534 10.2 处理像素映射536 10.2.1 对像素映射的操作536 10.2.2 像素映射的有用数据 类型537 10.2.3 图像的缩放和旋转543 10.3 合并像素映射546 10.3.1 读-修改-写循环547 10.3.2 Alpha通道和图像 融合548 10.3.3 像素的逻辑合并552 10.3.4 BitBLT操作556 10.4 自己实现直线绘制:Bresenham 算法557 Bresenham直线绘制算法558 10.5 定义和填充像素区域563 10.5.1 定义区域范围564 10.5.2 像素定义的区域564 10.5.3 一种递归洪水填充 算法565 10.5.4 用图案填充区域566 10.5.5 利用一致性:基于像素 串的区域填充568 10.6 处理符号定义的区域569 10.6.1 矩形定义的区域570 10.6.2 路径定义的区域571 10.7 填充多边形定义的区域573 10.7.1 边缘上的哪些像素 属于多边形574 10.7.2 改进算法性能576 10.8 失真;反失真技术580 10.8.1 反失真技术581 10.8.2 纹理的反失真586 10.8.3 使用OpenGL反失真588 10.9 生成更多的明暗效果和色彩590 10.9.1 顺序抖动591 10.9.2 误差扩散595 10.10 小结597 10.11 案例分析598 案例分析10.1 读取和显示BMP 图像文件598 案例分析10.2 用OpenGL融合 两幅图像598 案例分析10.3 基于像素串的 区域填充598 案例分析10.4 处理shape数据 结构599 案例分析10.5 shape的链码599 案例分析10.6 填充"水平凸" 多边形599 案例分析10.7 一般多边形 填充600 案例分析10.8 误差扩散600 10.12 进一步阅读600 第11章 曲线与曲面设计601 11.1 简介602 11.1.1 轨迹参数曲线602 11.1.2 运动的平滑度603 11.2 用多项式表示曲线606 11.3 关于交互式曲线设计611 11.4 用贝济埃曲线进行曲线设计613 de Casteljau算法613 11.5 贝济埃曲线的性质618 11.6 寻找更好的混合函数623 11.6.1 局部控制问题623 11.6.2 混合函数集的期望 性质表624 11.6.3 分段多项式曲线和样条626 11.6.4 根据g(t)建立一组混合 函数627 11.6.5 样条曲线和基函数630 11.7 B样条基函数631 11.7.1 B样条函数定义632 11.7.2 在结点向量中使用 多重结点636 11.7.3 开放B样条曲线:标准 结点向量637 11.8 B样条曲线设计的有用性质640 使用多重控制点641 11.9 有理样条和NURBS曲线642 11.10 插值简述646 11.10.1 用分段三次多项式 插值647 11.10.2 Hermite插值648 11.10.3 自然三次样条651 11.10.4 三次插值中计算 斜率653 11.10.5 交互指定切向量656 11.11 曲面建模657 11.11.1 基于B样条的 直纹面657 11.11.2 基于B样条的 旋转面657 11.11.3 贝济埃表面碎片659 11.11.4 贝济埃碎片的拼接660 11.11.5 B样条碎片662 11.11.6 NURBS曲面663 11.12 小结664 11.13 案例分析666 案例分析11.1 几种有趣的 参数曲线666 案例分析11.2 "椭圆台球 桌"667 案例分析11.3 贝济埃曲线669 案例分析11.4 一种二次样条 曲线生成法669 案例分析11.5 建立样条曲线 编辑器669 案例分析11.6 用B样条插值 控制点670 案例分析11.7 用三次多项式 插值671 案例分析11.8 古老的茶壶671 案例分析11.9 投影变换不 变性673 案例分析11.10 绘制NURBS 碎片673 11.14 进一步阅读675 第12章 色彩理论676 12.1 简介676 12.2 描述颜色679 12.2.1 主导波长679 12.2.2 色匹配680 12.3 国际照明协会标准682 12.3.1 构造CIE表684 12.3.2 使用CIE色度表685 12.3.3 色域686 12.4 颜色空间687 12.4.1 RGB和CMY颜色空间687 12.4.2 加色和减色系统688 12.4.3 HLS颜色模型689 12.5 颜色量化692 12.5.1 均衡量化693 12.5.2 流行算法695 12.5.3 中线切割算法695 12.5.4 八叉树量化696 12.6 小结698 12.7 案例分析699 案例分析12.1 画CIE图699 案例分析12.2 画RGB空间699 案例分析12.3 HSV到RGB 的转变699 案例分析12.4 均匀颜色量化699 案例分析12.5 流行颜色量化699 案例分析12.6 中线切割颜色 量化699 案例分析12.7 八叉树颜色 量化700 12.8 进一步阅读701 第13章 隐面的消除702 13.1 简介703 13.1.1 对象精度与图像精度 方法的比较704 13.1.2 多边形网格的数据描述705 13.2 再次研究深度缓存算法707 13.3 列表优先HSR算法708 13.3.1 粗心画家算法709 13.3.2 使用二叉空间分割(BSP) 树的HSR710 13.3.3 深度排序算法714 13.4 扫描线HSR方法716 13.5 区域的细分方法719 13.5.1 象限细分719 13.5.2 简单区域的其他定义722 13.6 关于隐线消除法724 edgeTest( )中的几何测试726 13.7 曲面的HSR方法728 13.8 小结730 13.9 案例分析731 案例分析13.1 画家算法 测试731 案例分析13.2 测试和分割732 案例分析13.3 使用BSP树 消除隐面732 案例分析13.4 使用深度排序法解 决HSR问题733 案例分析13.5 采用扫描线HSR 方法734 案例分析13.6 使用WARNOCK 算法绘制734 案例分析13.7 HLR的边堆栈 算法734 13.10 进一步阅读735 第14章 光线追踪法的介绍736 14.1 简介737 14.2 建立光线跟踪法的几何学738 14.3 光线跟踪法过程概述740 14.4 光线与对象的交点741 14.4.1 光线与通用平面的 相交743 14.4.2 光线与通用球体相交743 14.4.3 光线与变换后的对象 相交744 14.5 编制光线跟踪器的应用程序746 14.5.1 计算光线-球体相交 的例程752 14.5.2 用于发光球体场景的 完整的光线跟踪器754 14.6 光线与其他几种基本 形状的相交755 14.6.1 与正方形相交755 14.6.2 与锥形柱体相交756 14.6.3 与立方体(或任何凸 多面体)相交759 14.6.4 考虑更多的基本形状766 14.7 绘制场景的明暗图767 14.7.1 确定命中点处的法向量768 14.7.2 根据对象的表面材料 为其着色768 14.7.3 基于物理原理的明暗处理 模型:Cook-Torrance 明暗处理770 14.8 加入表面纹理776 14.8.1 实体纹理777 14.8.2 在表面上粘贴图像786 14.8.3 反失真光线追踪788 14.9 范围的使用789 14.9.1 框形范围和球形范围790 14.9.2 投影范围的使用795 14.10 加阴影以增加真实感798 14.11 反射与透明801 14.11.1 光的折射803 14.11.2 处理shade( )中的 折射问题807 14.12 复合对象:关于对象的布尔 运算810 14.12.1 对CSG对象的光线 追踪811 14.12.2 布尔对象的数据 结构813 14.12.3 光线与布尔对象相交816 14.12.4 构造和使用CSG对象 的范围820 14.13 小结822 14.14 案例分析823 案例分析14.1 放射型光线 跟踪器823 案例分析14.2 一种新型的光线 跟踪器824 案例分析14.3 在光线跟踪器中 实现阴影处理824 案例分析14.4 使用范围加速光 线跟踪过程824 案例分析14.5 对3D纹理的 光线跟踪824 案例分析14.6 反失真825 案例分析14.7 对其他基本形状 的光线跟踪825 案例分析14.8 一个用于研究 折射效应的2D 光线跟踪器825 案例分析14.9 反射光和折 射光825 案例分析14.10 对对象的布尔 组合进行光线 跟踪825 14.15 进一步阅读826 附录1 图形工具:获得OpenGL827 A1.1 OpenGL的获取和安装827 附录2 计算机图形学的数学研究829 A2.1 一些关于矩阵及其运算的 主要定义829 A2.1.1 矩阵的运算830 A2.1.2 两个矩阵相乘831 A2.1.3 矩阵的分块833 A2.1.4 矩阵的行列式834 A2.1.5 矩阵的逆矩阵835 A2.2 向量及其运算的一些性质837 A2.2.1 向量的正交;正交点积837 A2.2.2 标量三重积837 A2.2.3 三重向量积以及4个 向量的积839 A2.3 复数的运算839 A2.4 球坐标和方向余弦842 附录3 一些有用的类以及实用例程845 附录4 PostScript?简介877 A4.1 关于PostScript语言878 A4.1.1 准备事项878 A4.1.2 PostScript是"基于 堆栈的"879 A4.1.3 一些有关堆栈的操作符: pop、dup、exch和 clear880 A4.1.4 更高级的堆栈操作符880 A4.1.5 一些算术操作符881 A4.2 PostScript中的图形操作符884 A4.2.1 坐标系及其变换884 A4.2.2 路径构造动词885 A4.2.3 圆弧886 A4.2.4 用作绘图动词887 A4.2.5 坐标变换888 A4.2.6 图形状态操作符892 A4.3 在PostScript中绘制文本893 A4.4 定义新的变量和过程894 A4.4.1 定义变量894 A4.4.2 定义过程895 A4.4.3 使用repeat实现一种 简单的迭代形式899 A4.5 决策和迭代901 A4.5.1 把布尔值作为参数的 动词901 A4.5.2 判断902 A4.5.3 迭代904 A4.6 打印值908 A4.7 绘制灰度图909 附录5 SDL简介912 A5.1 SDL文法913 A5.2 SDL中的宏917 A5.3 扩展SDL917 |
商品评论(0条)