图形学复习
CH5 二维观察
5.1 窗口、视口和二维观察流水线
窗口是指世界坐标系中要显式的区域称,窗口定义了显式的内容
视口是指窗口映射到显示器的区域,视口定义了在什么位置显示
通常将世界坐标系中一部分区域映射到设备坐标系的操作称为观察变换,二维观察变换流水线如下:
模型局部坐标→ 世界坐标 → 观察坐标 -(通过窗口视口描述)→ 规范化观察坐标 → 设备坐标
5.2 裁剪窗口到规范化视口的映射
通常所说的裁剪窗口就是窗口,即世界坐标系中要显示的区域,我们可以选择裁剪窗口的不同形状、大小以及方向来确定裁剪效果,也可以自己实现裁剪算法和变换算法获取特殊形状的裁剪窗口
大多数图形系统将规范化和窗口-视口转换合成一步,先让视口坐标在[0,1]范围内(即让视口位于单位坐标系内),裁剪后将包含视口的单位正方形(规范化视口)映射到输出设备
设窗口内点 (xw,yw) 映射到视口内点 (xv,yv) :

为了保持视口和窗口中对象相对位置相同,必须满足等比例条件,求解出视口坐标为:
其中系数为:
不难发现,规范化变换的复合变换矩阵为 M=⎡⎣⎢⎢⎢⎢⎢⎢sx000sy0txty1⎤⎦⎥⎥⎥⎥⎥⎥
5.3 裁剪算法
识别指定区域内或区域外图形部分的过程称为裁剪,裁剪策略包括:
- 先裁剪后扫描转换
- 边扫描转换边裁剪
二维裁剪就是判断图形的点 P(x,y) 是否满足 xwmin≤x≤xwmaxxwmax,ywmin≤y≤ywmax
二维裁剪包括了以下几个方面:
- 线段裁剪
- 多边形填充区裁剪
- 曲线裁剪
- 文字裁剪
裁剪算法有很多种(具体略),多数都是按照裁剪策略中的两种策略:
- 按裁剪窗口的四条边依次裁剪,裁剪四次后的到窗口内图形
- 沿图形边界扫描(按一定方向),保留在裁剪窗口内的点
CH6 三维观察
6.1 三维观察流水线
三维观察和二维类似,都需要裁剪并且流水线基本相同,但不同点在于:
- 投影:视口/设备屏幕总是二维的,总要把三维图形投影到二维平面中显示
- 识别可见部分:三维图形存在被遮挡部分,投影过程中被遮挡部分不被显示
- 光照:三维渲染效果
三维观察流水线如下:
模型局部坐标 -[建模变换]→ 世界坐标 -[观察变换]→ 观察坐标 -[投影变换]→ 投影坐标 -[规范化和窗口裁剪]→ 规范化观察坐标 -[视口变换]→ 设备坐标
定义观察点 P0(x0,y0,z0) 为三维观察的位置,也叫视点、照相机位置,投影平面又叫观察平面
选定观察物体上一点 Pref 作为观察参考点,那么观察平面法向量 N=P0−Pref
6.2 投影变换
投影变换就是将维数为n的点变换成维数小于n的点,常见的投影有:
- 平行投影(包括正投影、斜投影):平行线投影
- 透视投影:汇聚线投影
(1)正投影
正投影是投影线垂直于投影平面(即观察平面)的平行投影
正投影裁剪窗口限制了观察坐标系中的x和y的限制,再定义两个近-远裁剪平面构成一个封闭的裁剪体,叫做正投影观察体
注意,投影过程中保留坐标的Z分量,用于可见性检查
下面是从正投影观察体[ (xwmin,ywmin,znear)→(xwmax,ywmax,zfar) ]到规范化观察体[ (−1,−1,−1)→(1,1,1) ]的规范化变换矩阵:
(2)斜投影
斜投影是投影路径与观察平面不垂直的平行投影,斜投影投影坐标为:
(3)透视投影
记透视投影的汇聚点为投影参考点 (xprp,yprp,zprp) ,则可以推出观察坐标系内点 (x,y,z) 在观察平面内坐标为:
其中 zvp 是在观察平面上选择的位于 zview 轴上的点