计算机图形学_第六章
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1 0 0 1 上 下 右 左
Cohen-Sutherland算法 裁剪 裁剪一条线段时,先求出端点p1和p2的编码code1和 code2,然后 (1)若code1|code2=0,对直线段应简取之。 (2)若code1&code2≠0,对直线段可简弃之。 (3)若上述两条件均不成立。则需求出直线段与窗口边界 的交点。在交点处把线段一分为二,其中必有一段完全 在窗口外,可以弃之。再对另一段重复进行上述处理, 直到该线段完全被舍弃或者找到位于窗口内的一段线段 为止。
( xv, yv)
( xvmin, yvmin )
摄像坐标系和裁剪窗口 (a)
标准化设备坐标系 (b)
设备坐标系和视口 (c)
1.以点 ( xwmin, ywmin ) 为中心进行缩放变换,将裁剪窗口变换成 标准化正方形大小 2.将标准化正方形映射到平面指定的视口中。
规范化和视口变换 变换方法
2 xw xw min max M window normsquare 0 0 xvmax xvmin 2 M normsquare viewport 0 0 0 2 ywmax ywmin 0 xwmax xwmin xwmax xwmin ywmax ywmin ywmax ywmin 1 xvmax xvmin 2 yvmax yvmin 2 1
y v (x0,y0) u v
y
(xv,yv)
x
u (xu,yu) x
1 0 x0 T 0 1 y0 0 0 1
xu R xv 0
yu yv 0
0 0 1
规范化和视口变换 裁剪窗口到规范化视口的映射 在这种映射中,规范化坐标系对应显示设备。
DC与NC的关系 对任何一个物理设备而言,DC与NC仅仅是坐 标值相差一个比例因子。 NC可以看成是一个抽象的图形显示设备,要 输出到具体的显示设备上时,只需乘上一个比 例因子。
二维观察流水线 裁剪窗口 二维场景中要显示的部分称为裁剪窗口。 视口 显示设备上用于显示裁剪窗口中图形内容的区域称为视口。
(3)如另一点在窗口内,则经(2)即确定了该线段在窗口内的部分。 如另一点不在窗口内,则该点和所求出的在窗口上的那一点构成一 条线段,重复步骤(2),即可求出落在窗口内的另一点。
Liang-Barsky算法(参数方程法)
直线的参数方程 设线段的两个端点为
参数方程如下:
其中, 。,参数u取[0,1] 之间的值。当u=0时 ,当u=1 时 。如果点 处于裁剪窗 口内:
Cohen-Sutherland算法 编码 对于任一端点(x, y),根据其坐标所在的区域,赋予一个 位的二进制码D3D2D1D0。编码规则如下图所示: (1) 若 x xwmin ,则D0=1,否则D0=0; (2) 若 x xwmax ,则D1=1,否则D1=0; (3) 若 y ywmin ,则D2=1,否则D2=0; (4) 若 y ywmax ,则D3=1,否则D3=0。
Liang-Barsky算法(参数方程法)
2、如果 pk 0,此时把直线从 到 的连线方向作为正向,将此直线无限延伸, 同时把把窗口边界无限延伸;然后分以下 两种情况进行讨论
Liang-Barsky算法(参数方程法) (a)当 pk 0 时,则是由窗口边界延伸线 的外部发出的一条直线进入相应窗口边 界延伸线的内部。
1 0 T 0 1 0 0
M window normviewp
规范化和视口变换 变换方法
xvmax xvmin sx xwmax xwmin yvmax yvmin sy ywmax ywmin xwmax xvmin xwmin xvmax tx xwmax xwmin ywmax yvmin ywmin yvmax ty ywmax ywmin
Cohen-Sutherland算法 举例
Cohen-Sutherland算法 举例
中点分割算法 基本思想 当对直线段不能简取也不能简弃时,简单地把线段等分 为二段,对两段重复上述测试处理,直至每条线段完全 在窗口内或完全在窗口外。其核心思想是通过二分逼近 来确定直线段与窗口的交点。 特点 主要计算过程只用到加法或位移运算,易于硬件实现, 同时适合于并行计算
世界坐标系到观察坐标系的变换矩阵 世界坐标系到摄像坐标系的变换 (1)点变换等于坐标系相反方向的变换 (2)将摄像坐标系原点移动到世界坐标系原点 (3)绕原点旋转使两坐标系重合
M world view R T
世界坐标系到观察坐标系的变换矩阵 已知: (1)观察坐标系的原点在世界坐标系中的位置是(x0,y0) (2)观察坐标系x轴在世界坐标系中的单位向量是u (3) 观察坐标系y轴在世界坐标系中的单位向量是v
Cohen-Sutherland算法 算法步骤
(1)输入直线段的两端点坐标:p1(x1, y1)、p2(x2, y2),以及窗口的 四条边界坐标。 (2)对p1、p2进行编码:点p1的编码为code1,点p2的编码为code2。 (3)若code1|code2=0,对直线段应简取之,转(6);否则,若 code1&code2≠0,对直线段可简弃之,转(7);当上述两条均不满 足时,进行步骤(4)。 (4)确保p1在窗口外部:若p1在窗口内,则交换p1和p2的坐标值和 编码。 (5)根据p1编码从低位开始找码为1处,从而确定p1在窗口外的哪一 侧,然后求出直线段与相应窗口边界的交点,并用该交点的坐标值 替换p1的坐标值。也即在交点s处把线段一分为二,并去掉p1s这 一段。考虑到p1是窗口外的一点,因此可以去掉p1s。转(2)。 (6)用直线扫描转换算法画出当前的直线段p1p2。 (7)算法结束。
中点分割算法 算法步骤
(1)若code1|code2=0,对直线段应简取之,结束;否则,若 code1&code2≠0,对直线段可简弃之,结束;当这两条均不满足 时,进行步骤(2)。 (2)找出该直线段离窗口边界最远的点和该直线段的中点。判中点 是否在窗口内:若中点不在窗口内,则把中点和离窗口边界最远点 构成的线段丢掉,以线段上的另一点和该中点再构成线段求其中点; 如中点在窗口内,则又以中点和最远点构成线段,并求其中点,直 到中点与窗口边界的坐标值在规定的误差范围内相等,则该中点就 是该线段落在窗口内的一个端点坐标。
二维线裁剪
Cohen-Sutherland算法 中点分割算法 Liang-Barsky算法
Cohen-Sutherland算法 基本思想 对每条直线段p1(x1, y1)p2(x2, y2)分三种情况处理: (1)直线段完全可见,“简取”之。 (2)直线段完全不可见,“简弃”之。 (3)直线段既不满足“简取”的条件,也不满足“简弃” 的条件,需要对直线段按交点进行分段,分段后重复上 述处理。
Liang-Barsky算法(参数方程法)
u x x1 xw min u x xw max x1 u y y1 yw min u y yw max y1
令:
有不等式:
Liang-Barsky算法(参数方程法)
直线与窗口边界的相对位置: 1、直线段与窗口边界平行,其 ,k 表示取哪一条边(k=1,2,3,4,分别对应左、 右、下、上)。如果对某一k值,还满 足 ,则此直线完全在边界外,可不 考虑;如果 ,此线段在边界内。
规范化和视口变换 变换方法
sx S 0 0 0 sy 0
xwmin (1 s x ) ywmin (1 s y ) 1 xvmin xwmin yvmin ywmin 1 sx T S 0 0 0 sy 0 tx ty 1
(b)当 pk 0 时,则是由窗口边界延伸线 的内部发出的一条直线进入相应窗口边 界延伸线的外部。
二维观察流水线 变焦距效果
整体放缩效果
漫游效果
把固定大小的裁剪窗口在一幅大图形上移动,视口不变,可以产生漫 游的效果。
二维观察流水线 二维观察变换流水线
MC
使用建模坐 标变换构造 世界坐标系 场景
WC
将世界坐标 转换为摄像 坐标
VC
DC
将规范化设备 坐标映射到设 备坐标
NC
将摄像坐标 转换为规范 化设备坐标
设备坐标系(Device Coordinates) 与图形显示设备相关的坐标系。如显示器或打印机的坐标 系。
规范化坐标系(Normal Device Coordinates ) 它是独立于具体的物理设备的一种坐标系,其坐标空间限 定在(0.0,0.0)到(1.0,1.0)的坐标范围内。
坐标系
第六章、二维观察 已知,有两个坐标系a、b。构造一个矩阵,将坐标系a蓝 色矩形框中的点(xw,yw)映射到坐标系b中蓝色矩形框中。 注意,矩阵变换使用列向量。
( xwmax , ywmax ) ( xvmax , yvmax )
( xw, yw)
( xwmin, ywmin )
( xv, yv)
( xvmin, yvmin )
(a)
(b)
第六章、二维观察
二维观察流水线 裁剪窗口 规范化和视口变换 OpenGL二维观察函数 裁剪算法 二维点裁剪 二维线裁剪 多边形填充区裁剪 曲线裁剪
坐标系 世界坐标系(World Coordinates) 用户处理自己的对象时所采用的坐标系,坐标系的大小及 尺寸由用户自己定义。
二维点裁剪 二维点裁剪 点的裁剪是图形裁剪的基础,点在窗口内的条件如下:
xwmin x xwmax ywmin y ywmax
二维线裁剪 直线段与裁剪窗口的关系 完全落在窗口内、完全落在窗口外或者与窗口边界相交
二维线裁剪 实交点与虚交点 实交点是直线段与窗口矩形边界的交点。虚交点则是直 线段与窗口矩形边界延长线或直线段的延长线与窗口矩 形边界的交点。
0 yvmax yvmin 2 0
OpenGL中的二维观察变换 (1)指定矩阵栈 glMatrixMode(GL_PROJECTION); glLoadIdentity();
ቤተ መጻሕፍቲ ባይዱ
(2)指定裁剪窗口 gluOrtho2D(0,w, 0, h); (3)指定视口 glViewport(0,0,w,h);
Cohen-Sutherland算法 求交 假定直线的端点坐标为(x1, y1)和(x2, y2) (1)左、右边界交点的计算:y=y1+k(x-x1); 其中:x是窗口左边界或右边界的值 (2)上、下边界交点的计算:x=x1+(y-y1)/k。 其中:y是窗口下边界或上边界的值 特点 用编码方法实现了对完全可见和不可见直线段的快速接 受和拒绝
裁剪窗口
视口
规范化坐标系
规范化和视口变换 变换方法
( xwmax , ywmax ) ( xvmax , yvmax )
( xw, yw)
( xwmin, ywmin )
( xv, yv)
( xvmin, yvmin )
1.以点 ( xwmin, ywmin ) 为中心进行缩放变换,将裁剪窗口变换 成视口大小 2.将 ( xwmin, ywmin ) 移动到 ( xvmin, yvmin )
规范化和视口变换 裁剪窗口到规范化坐标系的映射 在这种映射中规范化坐标系对应裁剪窗口
裁剪窗口
视口
规范化坐标系
规范化和视口变换 变换方法
( xwmax , ywmax )
( xvmax , yvmax )
(1,1)
( xw, yw)
( xv, yv)
( xwmin, ywmin )
(1, 1)
Cohen-Sutherland算法 裁剪 裁剪一条线段时,先求出端点p1和p2的编码code1和 code2,然后 (1)若code1|code2=0,对直线段应简取之。 (2)若code1&code2≠0,对直线段可简弃之。 (3)若上述两条件均不成立。则需求出直线段与窗口边界 的交点。在交点处把线段一分为二,其中必有一段完全 在窗口外,可以弃之。再对另一段重复进行上述处理, 直到该线段完全被舍弃或者找到位于窗口内的一段线段 为止。
( xv, yv)
( xvmin, yvmin )
摄像坐标系和裁剪窗口 (a)
标准化设备坐标系 (b)
设备坐标系和视口 (c)
1.以点 ( xwmin, ywmin ) 为中心进行缩放变换,将裁剪窗口变换成 标准化正方形大小 2.将标准化正方形映射到平面指定的视口中。
规范化和视口变换 变换方法
2 xw xw min max M window normsquare 0 0 xvmax xvmin 2 M normsquare viewport 0 0 0 2 ywmax ywmin 0 xwmax xwmin xwmax xwmin ywmax ywmin ywmax ywmin 1 xvmax xvmin 2 yvmax yvmin 2 1
y v (x0,y0) u v
y
(xv,yv)
x
u (xu,yu) x
1 0 x0 T 0 1 y0 0 0 1
xu R xv 0
yu yv 0
0 0 1
规范化和视口变换 裁剪窗口到规范化视口的映射 在这种映射中,规范化坐标系对应显示设备。
DC与NC的关系 对任何一个物理设备而言,DC与NC仅仅是坐 标值相差一个比例因子。 NC可以看成是一个抽象的图形显示设备,要 输出到具体的显示设备上时,只需乘上一个比 例因子。
二维观察流水线 裁剪窗口 二维场景中要显示的部分称为裁剪窗口。 视口 显示设备上用于显示裁剪窗口中图形内容的区域称为视口。
(3)如另一点在窗口内,则经(2)即确定了该线段在窗口内的部分。 如另一点不在窗口内,则该点和所求出的在窗口上的那一点构成一 条线段,重复步骤(2),即可求出落在窗口内的另一点。
Liang-Barsky算法(参数方程法)
直线的参数方程 设线段的两个端点为
参数方程如下:
其中, 。,参数u取[0,1] 之间的值。当u=0时 ,当u=1 时 。如果点 处于裁剪窗 口内:
Cohen-Sutherland算法 编码 对于任一端点(x, y),根据其坐标所在的区域,赋予一个 位的二进制码D3D2D1D0。编码规则如下图所示: (1) 若 x xwmin ,则D0=1,否则D0=0; (2) 若 x xwmax ,则D1=1,否则D1=0; (3) 若 y ywmin ,则D2=1,否则D2=0; (4) 若 y ywmax ,则D3=1,否则D3=0。
Liang-Barsky算法(参数方程法)
2、如果 pk 0,此时把直线从 到 的连线方向作为正向,将此直线无限延伸, 同时把把窗口边界无限延伸;然后分以下 两种情况进行讨论
Liang-Barsky算法(参数方程法) (a)当 pk 0 时,则是由窗口边界延伸线 的外部发出的一条直线进入相应窗口边 界延伸线的内部。
1 0 T 0 1 0 0
M window normviewp
规范化和视口变换 变换方法
xvmax xvmin sx xwmax xwmin yvmax yvmin sy ywmax ywmin xwmax xvmin xwmin xvmax tx xwmax xwmin ywmax yvmin ywmin yvmax ty ywmax ywmin
Cohen-Sutherland算法 举例
Cohen-Sutherland算法 举例
中点分割算法 基本思想 当对直线段不能简取也不能简弃时,简单地把线段等分 为二段,对两段重复上述测试处理,直至每条线段完全 在窗口内或完全在窗口外。其核心思想是通过二分逼近 来确定直线段与窗口的交点。 特点 主要计算过程只用到加法或位移运算,易于硬件实现, 同时适合于并行计算
世界坐标系到观察坐标系的变换矩阵 世界坐标系到摄像坐标系的变换 (1)点变换等于坐标系相反方向的变换 (2)将摄像坐标系原点移动到世界坐标系原点 (3)绕原点旋转使两坐标系重合
M world view R T
世界坐标系到观察坐标系的变换矩阵 已知: (1)观察坐标系的原点在世界坐标系中的位置是(x0,y0) (2)观察坐标系x轴在世界坐标系中的单位向量是u (3) 观察坐标系y轴在世界坐标系中的单位向量是v
Cohen-Sutherland算法 算法步骤
(1)输入直线段的两端点坐标:p1(x1, y1)、p2(x2, y2),以及窗口的 四条边界坐标。 (2)对p1、p2进行编码:点p1的编码为code1,点p2的编码为code2。 (3)若code1|code2=0,对直线段应简取之,转(6);否则,若 code1&code2≠0,对直线段可简弃之,转(7);当上述两条均不满 足时,进行步骤(4)。 (4)确保p1在窗口外部:若p1在窗口内,则交换p1和p2的坐标值和 编码。 (5)根据p1编码从低位开始找码为1处,从而确定p1在窗口外的哪一 侧,然后求出直线段与相应窗口边界的交点,并用该交点的坐标值 替换p1的坐标值。也即在交点s处把线段一分为二,并去掉p1s这 一段。考虑到p1是窗口外的一点,因此可以去掉p1s。转(2)。 (6)用直线扫描转换算法画出当前的直线段p1p2。 (7)算法结束。
中点分割算法 算法步骤
(1)若code1|code2=0,对直线段应简取之,结束;否则,若 code1&code2≠0,对直线段可简弃之,结束;当这两条均不满足 时,进行步骤(2)。 (2)找出该直线段离窗口边界最远的点和该直线段的中点。判中点 是否在窗口内:若中点不在窗口内,则把中点和离窗口边界最远点 构成的线段丢掉,以线段上的另一点和该中点再构成线段求其中点; 如中点在窗口内,则又以中点和最远点构成线段,并求其中点,直 到中点与窗口边界的坐标值在规定的误差范围内相等,则该中点就 是该线段落在窗口内的一个端点坐标。
二维线裁剪
Cohen-Sutherland算法 中点分割算法 Liang-Barsky算法
Cohen-Sutherland算法 基本思想 对每条直线段p1(x1, y1)p2(x2, y2)分三种情况处理: (1)直线段完全可见,“简取”之。 (2)直线段完全不可见,“简弃”之。 (3)直线段既不满足“简取”的条件,也不满足“简弃” 的条件,需要对直线段按交点进行分段,分段后重复上 述处理。
Liang-Barsky算法(参数方程法)
u x x1 xw min u x xw max x1 u y y1 yw min u y yw max y1
令:
有不等式:
Liang-Barsky算法(参数方程法)
直线与窗口边界的相对位置: 1、直线段与窗口边界平行,其 ,k 表示取哪一条边(k=1,2,3,4,分别对应左、 右、下、上)。如果对某一k值,还满 足 ,则此直线完全在边界外,可不 考虑;如果 ,此线段在边界内。
规范化和视口变换 变换方法
sx S 0 0 0 sy 0
xwmin (1 s x ) ywmin (1 s y ) 1 xvmin xwmin yvmin ywmin 1 sx T S 0 0 0 sy 0 tx ty 1
(b)当 pk 0 时,则是由窗口边界延伸线 的内部发出的一条直线进入相应窗口边 界延伸线的外部。
二维观察流水线 变焦距效果
整体放缩效果
漫游效果
把固定大小的裁剪窗口在一幅大图形上移动,视口不变,可以产生漫 游的效果。
二维观察流水线 二维观察变换流水线
MC
使用建模坐 标变换构造 世界坐标系 场景
WC
将世界坐标 转换为摄像 坐标
VC
DC
将规范化设备 坐标映射到设 备坐标
NC
将摄像坐标 转换为规范 化设备坐标
设备坐标系(Device Coordinates) 与图形显示设备相关的坐标系。如显示器或打印机的坐标 系。
规范化坐标系(Normal Device Coordinates ) 它是独立于具体的物理设备的一种坐标系,其坐标空间限 定在(0.0,0.0)到(1.0,1.0)的坐标范围内。
坐标系
第六章、二维观察 已知,有两个坐标系a、b。构造一个矩阵,将坐标系a蓝 色矩形框中的点(xw,yw)映射到坐标系b中蓝色矩形框中。 注意,矩阵变换使用列向量。
( xwmax , ywmax ) ( xvmax , yvmax )
( xw, yw)
( xwmin, ywmin )
( xv, yv)
( xvmin, yvmin )
(a)
(b)
第六章、二维观察
二维观察流水线 裁剪窗口 规范化和视口变换 OpenGL二维观察函数 裁剪算法 二维点裁剪 二维线裁剪 多边形填充区裁剪 曲线裁剪
坐标系 世界坐标系(World Coordinates) 用户处理自己的对象时所采用的坐标系,坐标系的大小及 尺寸由用户自己定义。
二维点裁剪 二维点裁剪 点的裁剪是图形裁剪的基础,点在窗口内的条件如下:
xwmin x xwmax ywmin y ywmax
二维线裁剪 直线段与裁剪窗口的关系 完全落在窗口内、完全落在窗口外或者与窗口边界相交
二维线裁剪 实交点与虚交点 实交点是直线段与窗口矩形边界的交点。虚交点则是直 线段与窗口矩形边界延长线或直线段的延长线与窗口矩 形边界的交点。
0 yvmax yvmin 2 0
OpenGL中的二维观察变换 (1)指定矩阵栈 glMatrixMode(GL_PROJECTION); glLoadIdentity();
ቤተ መጻሕፍቲ ባይዱ
(2)指定裁剪窗口 gluOrtho2D(0,w, 0, h); (3)指定视口 glViewport(0,0,w,h);
Cohen-Sutherland算法 求交 假定直线的端点坐标为(x1, y1)和(x2, y2) (1)左、右边界交点的计算:y=y1+k(x-x1); 其中:x是窗口左边界或右边界的值 (2)上、下边界交点的计算:x=x1+(y-y1)/k。 其中:y是窗口下边界或上边界的值 特点 用编码方法实现了对完全可见和不可见直线段的快速接 受和拒绝
裁剪窗口
视口
规范化坐标系
规范化和视口变换 变换方法
( xwmax , ywmax ) ( xvmax , yvmax )
( xw, yw)
( xwmin, ywmin )
( xv, yv)
( xvmin, yvmin )
1.以点 ( xwmin, ywmin ) 为中心进行缩放变换,将裁剪窗口变换 成视口大小 2.将 ( xwmin, ywmin ) 移动到 ( xvmin, yvmin )
规范化和视口变换 裁剪窗口到规范化坐标系的映射 在这种映射中规范化坐标系对应裁剪窗口
裁剪窗口
视口
规范化坐标系
规范化和视口变换 变换方法
( xwmax , ywmax )
( xvmax , yvmax )
(1,1)
( xw, yw)
( xv, yv)
( xwmin, ywmin )
(1, 1)