1.1 Graphics Areas
可以将图形学划分为不同的领域,核心领域有Modeling、Rendering、Animation三个:
Modeling:
Modeling deals with the mathematical specification of shape and appearance properties in a way that can be stored on the computer.
即Modeling将图形处理为具有数学规范的计算机可以存储的数据
Rendering
Rendering is a term inherited from art and deals with the creation of shaded images from 3D computer models.
即把Modeling建立好的3D图形(可以是任何的数学描述)变成可以直接显示的二维矩阵(特定的数学描述)
Animation
Animation is a technique to create an illusion of motion through sequences of images.
计算机动画需要在建模和渲染的基础上进行,但是新增了随时间变化的特性
非核心领域包括:
User interaction 交互设计
Virtual reality 虚拟现实
Visualization 可视化
Image processing 图像处理
Three-dimensional scanning 3D扫描
Computational photography 计算摄影
1.2 Major Applications
计算机图形学的主要应用:
Video Games 电子游戏
Cartoons 卡通动画
Visual effects 视觉效果
Animated films 动画电影
CAD/CAM 计算机辅助设计/计算机辅助制造
Simulation 仿真
Medical imaging 医学成像
Information visualization 信息可视化
1.3 Graphics APIS
随缘,都可以使用
1.4 Graphics Pipeline
- 绘图管道中使用的几何操作几乎完全可以在4D坐标空间中完成,4D坐标系是计算机科学中使用的最微妙、最美丽的结构之一
- 用不同程度的细节来表示一个模型是有用的
1.5 Numerical Issues
解决了一些特殊运算的问题,可以使一些特殊的浮点数运算不用条件判断直接运算也不会出错
算术运算:
+a/ (+ ∞ ) = +0,−a/ (+ ∞ ) = − 0,+a/ ( −∞ ) = − 0,−a/ ( −∞ ) = +0.∞ + ∞ = + ∞,∞−∞ = NaN,∞×∞ = ∞,∞/ ∞ = NaN,∞/a = ∞,∞/ 0 = ∞,0/ 0 = NaN.+a/ +0 = + ∞,−a/ +0 = −∞.
逻辑运算
任何数<+∞
任何数>−∞
+∞>−∞
包含NAN的语句真值一定是false
1.6 Effciency
使用下面的流程来编写图形程序,可以提高程序运行效率的方法:
- 尽可能以最直接的方式编写代码。根据需要动态计算中间结果,而不是存储它们。
- 以优化模式编译
- 使用现有的任何分析工具来查找关键瓶颈
- 检查数据结构以寻找改进局部性的方法。如果可能,使数据单元大小与目标体系结构上的缓存/页面大小相匹配
- 如果分析显示了数值计算中的瓶颈,则检查汇编代码,以查找遗漏的效率。重写源代码以解决问题
1.7 Designing and Coding Graphics Programs
1.7.1 Class Design
一个Graphics Program一般至少需要设计如下几种类:
- vector2 二维向量
- vector3 三维向量
- hvector 齐次坐标向量即四维向量
- rgb 一个表示颜色的三元组
- transform 变换矩阵,一般使用4*4矩阵
- image 一个二维数组,数据类型为rgb
注:数组和向量的区别是:向量是抽象数学概念,仅仅为一个有序对;数组是计算机存储数据的一种方式
1.7.2 Float vs Double
到底使用Float还是Double?两位作者分别给出了他们的建议
“存储float,运算double”,即在把float取出运算之前做一次类型转换,转换为double处理和运算,再把结果转回float存储回去——P.S.
“非必要不使用double,除非有明确的证据证明double非用不可”——S.M.
1.7.3 Debugging Graphicas Programs
作者给出了一些Graphics Program的调试技巧(trick):
-
The Scientifific Method:合理的推理,猜出问题可能出在哪里
-
Images as Coded Debugging Output:使用图形输出来辅助,提醒自己某个错误的发生
-
Using a Debugger:有时候还需要使用断点式的传统调试器
-
Data Visualization for Debugging:收集必要的数据,将其可视化(生成表格或插图)从而超出问题所在