计算机图形学基础教程

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

yw
1]

Sx 0
0
0
Sy
0
vxl wxl Sx vyb wyb Sy 1
写成方程为:
a

Sx

vxr wxr
vxl wxl
xv Sx xw vxl wxl Sx

yv

Sy

yw
vyb

wyb
Sy
b vxl wxl a
wyt
(xw,yw) 0000
wyb
vyt
(xv,yv) 0000
vyb
wxl
wxr
vxl
vxr
5-23窗口和视区的定义
1.将窗口左下角点(wxl,wyb)平移到观察坐标
系原点
1 0 0
T平移


0
1 0
wxl wyb 1
2. 对原点进行比例变换,使窗口的大小和视区 大小相等,将窗口变换为视区
并且yB <= y <= yT 否则,P点就在窗口外。
(xL,yB )
(xR,yT )
直线段裁剪
——直LAND直 线裁剪算法
5.5.1 编码原理 5.5.2 裁剪步骤 5.5.3 交点计算公式
在二维观察中,需要在观察坐标系下 根据窗口大小对用户坐标系中的二维图形进 行裁剪(clipping),只将位于窗口内的图 形变换到视区输出。直线的裁剪是二维图形 裁剪的基础,裁剪的实质是判断直线是否与 窗口相交,如相交则进一步确定位于窗口内 的部分。
Computer Graphics
第五章 二维变换和裁剪(2)
本章内容-2
5.4 二维图形裁剪 5.5 Cohen-Sutherland直线裁剪算法 5.6 中点分割直线段裁剪算法 5.7 梁友栋-Barsky直线段裁剪算法
5.4 二维图形裁剪
5.4.1 图形学中常用的坐标系 5.4.2 窗口和视区及窗视变换 5.4.3 窗视变换矩阵 5.4.4 点的裁剪
主要过程只用到加法和除法运算,适合 硬件实现,它可以用左右移位来代替乘 除法,这样就大大加快了速度。
5.7 梁友栋-BARSKY算法
设要裁剪的线段是P0P1。 P0P1 和窗口边界交于A,B,C,D四点,
见图。算法的基本思想是从
A,B和P0三点中找出最靠近P1的 点,图中要找的点是P0。从C,D 和P1中找出最靠近P0的点。图 中要找的点是C点。那么P0C就 是P0P1线段上的可见部分。
5.4.1 图形学中常用的坐标系
计算机图形学中常用的坐标系有 用户坐标系、观察坐标系、设备坐标 系和规格化设备坐标系等。
1.用户坐标系(User Coordinate ,UC)
用户定义原始图形所采用的坐标系称为用户
坐标系。用户坐标系通常根据应用的需要可以选 择直角坐标系、圆柱坐标系、球坐标系以及极坐
在计算机图形学术语中,窗口最初是指 要观察的图形区域。但是随着Windows的出 现,窗口概念已广泛用于图形系统中,泛指 任何可以移动,改变大小、激活或变为无效 的屏幕上的矩形区域。在本章中,窗口回归 到其的原始定义,是在观察坐标系中确定输 出图形范围的矩形区域。
5.4.3 窗视变换矩阵
窗口和视区的边界定义如图5-23所示,假 定把窗口内的一点P(xw,yw)变换为视区中的 一点P’(xv,yv)。这属于相对于任一参考点 的二维几何变换,变换步骤为:
5.5.1 编码原理
Cohen-Sutherland直线裁剪算法是最早流行 的编码算法。每条直线的端点都被赋予一组四位 二进制代码,称为区域编码(Region Code,RC), 用来标识直线端点相对于窗口边界及其延长线的 位置。假设窗口是标准矩形,由上(y=wyt)、下 (y=wyb)、左(x=wxl)、右(x=wxr)四条边组成, 如图5-24所示。延长窗口四条边形成9个区域,如 图5-25所示。这样根据直线的任一端点P(x,y)所 处的窗口区域位置,可以赋予一组4位二进制区域 码RC=C4C3C2C1。


c

S
y

vyt vyb wyt wyb
d vyb wyb c
则窗视变换的展开式为:

xv yv

a xw c yw
b d
(5-12)
点的裁剪
图形裁剪中最基本的问题。
假设窗口的左下角坐标为 (xL,yB),右上角坐标为 (xR,yT),对于给定点P(x,y), 则P点在窗口内的条件是要满 足下列不等式: xL <= x <= xR
中点分割算法-求线段与窗口的交点
从P0出发找距离P0最近可见点采用中点分割方法 先求出P0P1的中点Pm, 若P0Pm不是显然不可见的,并且P0P1在窗口中有可见 部分,则距P0最近的可见点一定落在P0Pm上,所以用 P0Pm代替P0P1; 否则取PmP1代替P0P1。 再对新的P0P1求中点Pm。重复上述过程,直到PmP1长 度小于给定的控制常数为止,此时Pm收敛于交点。
梁友栋-BARSKY算法
线段的参数表示
x=x0+t△x
y=y0+t△y
0<=t<=1
△x=x1-x0
△y=y1-y0
窗口边界的四条边分为两类:始边和终边。
若x 若x

0 0
因此,窗视变换矩阵为:
1
T
T平移
T比例 T反平移


0
0 1
0 0

Sx

0
0 Sy
0 1
0


0
0 0 1 0
wxl wyb 1 0 0 1 vxl vyb 1
代入,Sx和Sy的值,窗视变换矩阵为:

[ xv
yv 1] [xw
Sx 0 0
T比例


0
Sy
0
0 0 1
其中

S
x


S
y

vxr wxr vyt wyt
vxl wxl vyb wyb
3. 进行反平移,将视区的左下角点平移到设备坐 标系的(vxl,vyb)点
1 0 0
T反平移


0
1 0
vxl vyb 1
若直线既不满足“简取”也不满足 “简弃”的条件,直线必然与窗口相交, 需要计算直线与窗口边界的交点。交点 将直线分为两段,其中一段完全位于窗 口外,可“简弃”之。对另一段赋予交 点处的区域编码,再次测试,再次求交, 直至找到确定完全位于窗口内的直线段 为止。
实现时,一般按固定顺序左 (x=wxl),右(x=wxr)、下(y=wyb)、 上(y=wyt)求解窗口与直线的交点。
标系等等。图5-17所示为常用的二维和三维用户 直角坐标系。
y
z
O
x
O
y
x
5-17 二维和三维用户坐标系
2.观察坐标系(View Coordinate ,VC)
依据观察窗口的方向和形状在用户坐标系中 定义的坐标系称为观察坐标系,观察坐标系用 于指定图形的哪一部分可以输出范围。
y y
x
O
x
5-18 观察坐标系
规格化设备坐标系是将设备坐标系规格化到(0.0, 0.0)到(1.0,1.0)的范围内而定义的坐标系。规格化 设备坐标系独立于具体输出设备。一旦图形变换到规格 化设备坐标系中,只要作一个简单的乘法运算即可映射 到具体的设备坐标系中。由于规格化设备坐标系能统一 用户各种图形的显示范围,故把用户图形变换成规格化 设备坐标系中的统一大小标准图形的过程叫作图形的逻 辑输出。把规格化设备坐标系中的标准图形送到显示设 备上输出的过程叫作图形的物理输出。有了规格化设备 坐标系后,图形的输出可以在抽象的显示设备上进行讨 论,因而这种图形学又称为与具体设备无关的图形学。
3.设备坐标系 (Device Coordinate ,DC)
显示器等图形输出设备自身都有一个坐标系 称为设备坐标系,也称为屏幕坐标系。设备坐标 系是二维坐标系,原点位于屏幕左上角,x轴垂 直向右,y轴垂直向下,基本单位为像素。
1
x
O
O
y
5-19 设备坐标系
1
5-20 规格化设备坐标系
4.规格化设备坐标系 (Normalized Device Coordinate ,NDC)
从P1出发找距离P1最近可见点采用上面类似方法。
P0
A
Pm
B P1
5.6.2 中点计算公式
对于端点坐标为P0(x0,y0),P1(x1,y1) 的直线段,中点坐标的计算公式为:
x (x0 x1) / 2
y ( y0 y1) / 2
(5-15)
对分辩率为2N*2N的显示器,上述二分过 程至多进行N次。
5.4.2 窗口和视区及窗视变换
在观察坐标系中定义的确定显示内容的 区域称为窗口。显然此时窗口内的图形是用 户希望在屏幕上输出的,窗口是裁剪图形的 标准参照物。
在设备坐标系中定义的输出图形的区域 称为视区。视区和窗口的大小可以不相同。 一般情况下,用户把窗口内感兴趣的图形输 出到屏幕上相应的视区内。在屏幕上可以定 义多个视区,用来同时显示不同的窗口内的 图形信息,图5-21定义了三个窗口内容用于 输出,图5-22的屏幕被划分为三个视区,对 三个窗口内容进行了重组。
中点分割直线段裁剪算法原理是简 单地把直线段等分为两段直线,对每一段 直线重复“简取”和“简弃”的处理,对 于不能处理的直线段再继续等分为两段直 线,直至每一段完全能够被“简取”或 “简弃”,也就是说直至每段直线完全位 于窗口之内或完全位于窗口之外,就完成 了直线段的裁剪工作。直线段中点分割裁 剪算法是采用二分算法的思想来逐次计算 直线段的中点以逼近窗口边界。中点分割 算法的计算过程只用到了加法和移位运算, 易于使用硬件实现。
如何判定应该与窗口的哪条边求交? 编码中对应位为1的边。
1001 0001 0101
1000 0000 0100
1010 0010 0110
编码
P1 P3 P4
P2
线段裁剪
5.5.3 交点计算公式
对于端点坐标为P1(x1,y1)和P2(x2,y2)的直 线,与窗口左边界(x=wxl)或右边界(x=wxr) 交点的y坐标的计算公式为:
wyt
窗口 0000 wyb
wxl
wxr
5-24 窗口坐标
1001 0001
1000 0000
1010 0010
0101
0100
0110
5-25 区域编码
为了保证窗口内直线端点的编码为零,编码规则定义如下:
第一位:若端点位于窗口之左侧,即x<wxl,则C1=1,否则C1=0。 第二位:若端点位于窗口之右侧,即x>wxr,则C2=1,否则C2=0。 第三位:若端点位于窗口之下侧,即y<wyb,则C3=1,否则C3=0。 第四位:若端点位于窗口之上侧,即y>wyt,则C4=1,否则C4=0。
5.6.1 中点分割算法原理 5.6.2 中点计算公式
5.6.1 中点分割算法原理
Cohen-Sutherland裁剪算法提出对直 线段端点进行编码,并把直线段与窗口的关 系划分为三种情况,对前两种情况进行了 “简取”和“简弃”的简单处理。对于第三 种情况,需要根据公式(5-13)和(5-14) 计算直线段与窗口边界的交点。中点分割算 法对第三种情况做了改进,不需要求解直线 段与窗口边界的交点就可以对直线段进行裁 剪。
5-21三个窗口
5-22 三个视区
图形输出需要进行从窗口到视区的变换,只有窗口 内的图形才能在视区中输出,并且输出的形状要根据视 区的大小进行调整,这称为窗视变换(Window Viewport Transformation,WVT)。在二维图形观察中, 可以这样理解,窗口相当于一个一扇窗户,窗口内的图 形是希望看到的,就在视区中输出,窗口外的图形不希 望看到,不在视区中输出,因此需要对窗口中输出的二 维图形进行裁剪。
其中
y k(x x1) y1
(5-13)
k ( y2 y1) /( x2 x1)
与窗口上边界(y=wyt)或下边界(y=wyb)交 点的x坐标的计算公式为:
x

y y1 k

x1
(5-14)
其中 k ( y2 y1) /(x2 x1)
5.6中点分割直线段裁剪算法
5.5.2 裁剪步骤
若直线的两个端点的区域编码都为零, 即RC1|RC2=0(二者按位相或的结果为零, 即RC1=0且RC2=0),说明直线两端点都在 窗口内,应“简取”之。
若直线的两个端点的区域编码都不 为零,即RC1&RC2≠0(二者按位相与的结 果不为零,即RC1≠0且RC2≠0,即直线位 于窗外的同一侧,说明直线的两个端点 都在窗口外,应“简弃”之。
相关文档
最新文档