230 likes | 434 Views
第 3 章 二维观察变换与裁剪. 3.1 窗口 — 视区变换 3.2 工作站变换 3.3 二维裁剪算法. 规范化变换 / 窗口 - 视区变换. 工作站变换. 二维变换. 二维裁剪. 图形显示. 观察变换. 二维图形输出流水线. 3.1 窗口 — 视区变换. 3.1.1 基本概念. 1. 用户域和窗口(对用户坐标系而言). . 窗口. . 世界(用户)坐标系. 用户域 是用户定义设计对象的连续无限的二维或三维空间。 窗口 在用户域中指定的一个区域,用户只能将该区域的图形输出到图形设备上。 窗口是用户域的一个子域。
E N D
第3章 二维观察变换与裁剪 3.1窗口—视区变换 3.2工作站变换 3.3二维裁剪算法
规范化变换/ 窗口-视区变换 工作站变换 二维变换 二维裁剪 图形显示 观察变换 二维图形输出流水线
3.1 窗口—视区变换 3.1.1 基本概念 1. 用户域和窗口(对用户坐标系而言) 窗口 世界(用户)坐标系
用户域 是用户定义设计对象的连续无限的二维或三维空间。窗口 • 在用户域中指定的一个区域,用户只能将该区域的图形输出到图形设备上。 • 窗口是用户域的一个子域。 • 窗口一般是矩形区域,可用其左下角点和右上角点坐标来表示。通常窗口的边界与坐标轴平行。 • 窗口可以嵌套。
2. 规范化设备坐标系 视区 1 viewport 0 1 规范化设备坐标系 • 规范化设备坐标系:用一个单位正方形定义的一个虚拟显示设备的显示区域,且单位正方形的左下角位于坐标系统的原点。 • 目的与作用:引入一个与显示设备无关的工具描述显示区域。使应用程序与图形设备无关,增强应用程序的可移植性。
3.1.2 窗口-视区变换 窗口 (vx,vy) (wx,wy) 1 视区 0 0 1
3.2 工作站变换 屏幕区 工作站窗口 1 工作站视区 V Workstation viewport 0 1 0 H 规范化设备坐标系 设备/图像坐标系 工作站变换:将规范化坐标变换为离散设备/图像坐标。它本质上是第二个窗口-视区变换。 注:工作站窗口可以是这个视区,也可以是其一部分.
1 主菜单区 2 子菜单区 3 图形显示区 4 提示信息区 视图分区
设备坐标系(DC) • 图形输出设备(如显示器、绘图机)上的坐标系 • 是一个二维平面坐标系 • 定义域是整数域且有界
屏幕域和视图区 • 屏幕域 • 屏幕域是图形设备上输出图形的最大区域 • 屏幕域是有限的整数域,如分辨率为1024×768的显示器,其屏幕域 DC 可定义为: DC∈[0∶1023]×[0∶767] • 视图区 • 用户在屏幕域内指定的用于显示图形的区域 • 用设备坐标定义,一般定义成矩形,由其左下角点和右上角点坐标来定义 • 一个屏幕可以定义多个视图区,并且视图区可以嵌套
3.3 二维裁剪算法 • 一般地,对于给定的区域,判断图形的哪些部分在该区域内或区域外的过程称为裁剪算法。相应的参考区域称为窗口。 • 裁剪技术的本质问题是对线段或多边形作求交与裁剪,仅保留需要的部分。 • 按照裁剪对象的不同,裁剪算法分为: • 点裁剪 • 线裁剪(直线段) • 区域裁剪(多边形) • 曲线裁剪 • 文本裁剪
假设裁剪窗口 是一个矩形,其边界平行于坐标轴。 1. 点裁剪 对于点P(x,y),若下面的不等式成立,则P显示。 否则,P被裁剪掉。 应用: 由粒子(点)造型的场景,如爆炸、海上的泡沫等。
2. 直线段裁剪 P9 P10 P2 P4 P8 P1 P6 P3 裁剪前 P5 P7 P2’ P1’ 裁剪后 P6’ P8’ P5’ P7’
线段裁剪的基本过程: 首先,对于给定的线段,判定它是否完全在裁剪窗口内;如果不是,判定它是否完全在裁剪窗口外。最后,如果我们不能判定一个线段完全在裁剪窗口内或外,则必须与一个或多个窗口边界求交。 具体方法:对线段的端点进行“内-外”测试。 (1)若线段的两个端点都在窗口内,则保留线段; (2)若线段的两个端点都在窗口任一边界的外侧,则舍弃线段; (3)所有穿过一个和多个窗口边界的线段需进行求交运算。以找出该线段落在窗口区内或窗口边界上的起始点和终止点的坐标。
编码裁剪法((Cohen-Sutherland算法): • 第一步,区域编码 • 延长窗口边界,将平面分成9个区域,每个区域用4位二进制 代码表示,称为区域码。其作用是识别点相对于裁剪窗口边界的位置。 约定4位码中最右边一位为第1位,则编码规则如下: above 1010 1001 1000 right left 0001 0010 0000 0101 0100 0110 below
第二步 ,建立线段端点的区域编码。 设(x,y)是线段端点的坐标,则第1位取 的符号位。 第2位取 的符号位。 第3位取 的符号位。 第4位取 的符号位。 第三步,判断线段与窗口间的位置关系。 (1)若线段两端点的编码均为“ 0000”, 则线段全部位于窗口内。 (2)若线段两端点编码的逻辑“与”不是0000,则线段必位于窗口外。
(3)若根据(1)、(2)不能直接判定线段在窗口内或窗口外,我们需要计算线段与窗口边界的交。由下图可知,这些线段可能穿入窗口的内部,也可能不穿过窗口的内部。(3)若根据(1)、(2)不能直接判定线段在窗口内或窗口外,我们需要计算线段与窗口边界的交。由下图可知,这些线段可能穿入窗口的内部,也可能不穿过窗口的内部。 这类线段的处理过程: 将线段的位于窗口外端点与窗口边界进行比较,以确定线段的多大部分被舍弃。对剩余的部分线段继续按(1)、(2)和(3)进行处理。直到线段完全在窗口内或完全在窗口外为止。 P2 P2’ P1’ P3 P1 P3’ P4
具体操作: (1)可以按照left,right, bottom, top的顺序检查线段端点与窗口边界之间的关系。 现通过例子对该算法进行说明。考虑线段P1P2的端点P1,依次检查P1与窗口的左、右和下边界间的位置关系,发现P1点在裁剪窗口的下面。于是求出该线段与窗口底边界的交点P1’。这时,线段变为P1’P2。由于P2在裁剪窗口之外,通过检查该端点与窗口边界的关系发现,它在窗口的左侧。可以计算出线段P1’P2与窗口左边界的交点为P2’,该点位于窗口的上部,因此最后的交点为P2’’。线段P1’P2’’保留。 P2 P2’ P2’’ P1’ P3 P1 P3’ P4
(2) 线段与边界的求交算法 一般地,由(x1, y1)到(x2,y2)的截距式表示可求出该线段与垂直边界交点的y坐标为: 或 类似地,线段与水平边界交点的x坐标为: 其中, 或
回顾二维图形输出流水线: 规范化变换/ 窗口-视区变换 工作站变换 二维变换 二维裁剪 图形显示 观察变换
习题3 3-1 (a) 求出物体绕坐标原点旋转30度的变换矩阵; (b)求出点P(2,4)在上述旋转变换后新的坐标值。 3-2 写出物体绕固定点P(h,k)旋转的变换矩阵的一般形式。 3-3 求三角形A(0,0), B(1,1), C(5,2)旋转45度后的新三角形的顶点坐标。(a)绕坐标原点旋转; (b)*绕P(-1,-1)旋转。 3-4 已知窗口左下角与右上角的坐标分别为(1,1)和(3,5),求规范化坐标变换 。(a)视区为整个规范化设备屏幕空间; (b)视区的左下角和右上角坐标分别为(0,0)和(1/2,1/2)。 上机实践题之一: 编程实现直线段的编码裁剪算法。
选做题 3-1 写出关于固定点P(h,k)进行比例变换的矩阵的一般形式。 3-2 若将三角形A(0,0), B(1,1), C(5,2)放大2倍,同时保持C(5,2)顶点的位置不变,试求出新三角形的坐标。 3-3 了解Liang-Barsky裁剪算法。