版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、2021-11-7计算机图形学演示稿 纪玉波制作(C)1第五章第五章 图形变换图形变换5.2 5.2 三维图形变换三维图形变换 ( (Tree-Dimensional Transformations) ) 三维图形变换可以在二维图形变换方法基础上增加对z坐标的考虑而得到,其基本变换也为平移、比例、旋转、对称、错切等五种变换。在二维图形变换的讨论中我们已经使用了齐次坐标表示法,其变换矩阵是33阶矩阵。对于三维空间,则变换矩阵需要是44阶矩阵。在三维图形变换的讨论中,仍采用假定坐标系不动,图形变换的方式。并且假定变换是在右手坐标系下进行。2021-11-7计算机图形学演示稿 纪玉波制作(C)25.
2、2.1 5.2.1 平移平移变换变换( (Translation) ) 平移变换是使三维图形在空间平移一段距离而形状和大小保持不变。已知空间一点的坐标是P(x,y,z),沿X、Y及Z轴方向分别平移tx 、ty、tz,后,得新坐标P(x,y,z)的表示式为:zyxtzztyytxx矩阵形式为: 101000010000111zyxtttzyxzyx2021-11-7计算机图形学演示稿 纪玉波制作(C)35.2.2 5.2.2 比例比例变换变换( (Scaling) ) 相对于原点的比例变换的表示式为:zyxszzsyysxx矩阵表示是: 100000000000011zyxssszyxzyx 式
3、中sx、sy和sz分别表示点P(x,y,z)沿X、Y及Z轴方向相对坐标原点的比例变换系数。比例变换系数可赋予任何正数值, 当值小于1时缩小图形,值大于1则放大图形。当sx、sy和sz被赋予相同值时,使图形产生三个坐标轴方向相对比例一致的变换, sx、sy和sz值不等时则产生不一致的变换。2021-11-7计算机图形学演示稿 纪玉波制作(C)4 相对于给定点Pc(xc,yc,zc)的比例变换的矩阵表示为: 1)1 ()1 ()1 (00000000011zcycxczyxszsysxssszyxzyx5.2.3 5.2.3 旋转旋转变换变换( (Rotation) ) 三维图形作旋转变换时,需要
4、指定一个旋转轴和旋转角度。二维图形的旋转变换仅发生在XY平面上,而三维旋转变换则可能围绕空间任意直线轴进行。通常规定图形绕某轴逆时针方向旋转时角度为正。如果使用左手坐标系,或图形不动而坐标系旋转时,则方向相反。 旋转变换前后三维图形的大小和形状不发生变化,只是空间位置发生了变化。2021-11-7计算机图形学演示稿 纪玉波制作(C)5 绕坐标轴的旋转变换是最简单的旋转变换,当三维图形绕某一坐标轴旋转时,图形上各点在此轴的坐标值不变,而在另两坐标轴所组成的坐标面上的坐标值相当于一个二维的旋转变换。1绕坐标轴的旋转变换绕坐标轴的旋转变换(Around the rotation axis) (1)
5、绕绕Z轴旋转变换轴旋转变换 三维图形绕Z轴旋转时,图形上各顶点z坐标不变,x、y坐标的变化相当于在XY二维平面内绕原点旋转。所以绕Z轴旋转变换的表达式为:zzyxyyxxzzzzcossinsincos2021-11-7计算机图形学演示稿 纪玉波制作(C)6矩阵表示为: 1000010000cossin00sincos11zzzzzyxzyx(2 2) 绕绕X X轴旋转变换轴旋转变换 三维图形绕X轴旋转时,图形上各顶点x坐标不变,y、z坐标的变化相当于在YZ二维平面内绕原点旋转。所以绕X轴旋转变换的表达式为:xxxxzyzzyyxxcossinsincos2021-11-7计算机图形学演示稿
6、纪玉波制作(C)7矩阵表示为: 10000cossin00sincos0000111xxxxzyxzyx(3 3) 绕绕Y Y轴旋转变换轴旋转变换 三维图形绕Y轴旋转时,图形上各顶点y坐标不变,x、z坐标的变化相当于在XZ二维平面内绕原点旋转。所以绕Y轴旋转变换的表达式为:yyyyzconxzyyzxxsinsincos2021-11-7计算机图形学演示稿 纪玉波制作(C)8矩阵表示为: 10000cos0sin00100sin0cos11yyyyzyxzyx(4)绕三个坐标轴的旋转变换)绕三个坐标轴的旋转变换 如果做绕多于一个坐标轴的旋转变换,则需要考虑旋转顺序。因为不同的旋转顺序会得到不同
7、的结果。例如,一般情况下T=TxTy与T=TyTx是不相等的。因为:2021-11-7计算机图形学演示稿 纪玉波制作(C)910000cos0sin00100sin0cos10000cossin00sincos00001yyyyxxxxxyT10000coscossinsincos0sincossinsin0sin0cosyxxyxyxxyxyycon10000cossin00sincos0000110000cos0sin00100sin0cosxxxxyyyyyxT10000coscoscossinsin0sincos00sincossinsincosyxyxyxxyxyxy2021-11-
8、7计算机图形学演示稿 纪玉波制作(C)10 当做绕多于一个坐标轴的旋转变换时,一般采用Y轴-X轴-Z轴的顺序进行变换,这同日常生活中人们观察物体的习惯顺序相似,先观察两侧(绕Y轴),再观察上下(绕X轴),再观察纵深(绕Z轴)。其变换矩阵为: TTyTxTz2 2一般三维旋转变换一般三维旋转变换(General 3D rotation) 更一般的旋转变换是绕空间任意轴作旋转变换。我们可以用平移变换与绕坐标轴旋转变换的复合变换得到其变换公式。如果给定旋转轴和旋转角,可以通过平移及旋转给定轴使其与某一坐标轴重合,绕坐标轴完成指定的旋转,然后再用逆变换使给定轴回到其原始位置。各次变换矩阵乘起来即形成复
9、合变换。2021-11-7计算机图形学演示稿 纪玉波制作(C)11 已知空间一点的坐标是P(x,y,z),设给定的旋转轴为I,它对三个坐标轴的方向余弦分别为: coscoscos321nnn如右图所示2021-11-7计算机图形学演示稿 纪玉波制作(C)12旋转角为,轴上任一点P(xc,yc,zc)为旋转的中心点。则复合变换的过程为:(1) (1) 将将P(xP(xc c,y,yc c,z,zc c) )平移到坐标原点平移到坐标原点 变换矩阵为:10100001000011ccczyxT2) 2) 将将I I轴绕轴绕Y Y轴旋转轴旋转 y y角角,同YZ平面重合,其变换矩阵为:10000cos
10、0sin00100sin0cos2yyyyT2021-11-7计算机图形学演示稿 纪玉波制作(C)13(3) (3) 将将I I轴绕轴绕X X轴旋转轴旋转 x x角角,同Y轴重合,其变换矩阵为:10000cossin00sincos000013xxxxT(4) (4) 将将P(x,y,zP(x,y,z)点绕)点绕Y Y轴旋转轴旋转角角,其变换矩阵为:10000cos0sin00100sin0cos4T2021-11-7计算机图形学演示稿 纪玉波制作(C)14(5 5)绕)绕X X轴旋转轴旋转- - x x角角,其变换矩阵为:10000cossin00sincos000015xxxxT(6 6)
11、绕)绕Y Y轴旋转轴旋转- - y y角角,其变换矩阵为:10000cos0sin00100sin0cos6yyyyT2021-11-7计算机图形学演示稿 纪玉波制作(C)15(7 7)将)将P(xP(xc c,y,yc c,z,zc c) )平移回原位置平移回原位置,其变换矩阵为:10100001000017ccczyxT复合变换矩阵为:TT1T2T3T4T5T6T7变换过程式中,sinx、siny、cosx、cosy为中间变量,应使用已知量n1、n2、n3表示出来。考虑I轴上的单位向量n n,它在三个坐标轴上的投影值即为n1、n2、n3。取Y轴上一单位向量将其绕X轴旋转-x角,再绕Y轴旋转
12、-y角,则此单位向量将同单位向量n n重合,其变换过程为:2021-11-7计算机图形学演示稿 纪玉波制作(C)16 10000cos0sin00100sin0cos10000cossin00sincos0000110101321yyyyxxxxnnn1sinsinsinyxxyxconcon即n1=sinx siny,n2= cosx,n3= sinx cosy。同时考虑到n12+n22+n32=1,可解得:2cosnx23212cos1sinnnxx232133sincosnnnnxy232111sinsinnnnnxy2021-11-7计算机图形学演示稿 纪玉波制作(C)17 将矩阵相乘
13、后并将中间变量替换掉可得复合变换矩阵,展开成代数方程为: x x(x(xx xc c)(n)(n1 12 2(1(1n n1 12 2)cos)cos ( (y yy yc c)()( n1n2(1(1cos)cos)n3sin)sin) ( (z zz zc c)()( n1n3(1(1cos)cos)n2sin)sin)x xc c y y=(=(x xx xc c)()( n1n2(1(1cos)cos)n3sin)sin) ( (y yy yc c)()( n2 22 2(1(1n2 22 2)cos) )cos) ( (z zz zc c)()( n2n3(1(1cos)cos)n1
14、sin)sin)y yc c z z=(=(x xx xc c)()( n1n3(1(1cos)cos)n2sin)sin) ( (y yy yc c)()( n2n3(1(1cos)cos)n1sin)sin) ( (z zz zc c)()( n3 32 2(1(1n3 32 2)cos)cos)z zc c 2021-11-7计算机图形学演示稿 纪玉波制作(C)18 至此,绕空间任意轴旋转的复杂问题得以全部解决。如果设=0,=90,xc=yc=zc=0,此时n1=1,n2=n3=0,是绕X轴以原点为中心的旋转变换,同前面推导出的绕X轴旋转变换的公式相同。三维图形旋转变换示例三维图形旋转变
15、换示例2021-11-7计算机图形学演示稿 纪玉波制作(C)195.2.4 5.2.4 对称对称变换变换(Reflection)(Reflection) 三维对称变换可以是关于给定对称轴的或者是关于给定对称平面的变换。关于给定对称轴的对称变换等价于绕此轴旋转180,可以直接使用已讨论过的相对于轴线的旋转变换公式。关于给定对称平面的对称变换其最简单的是对称于坐标平面的变换。比如,空间一点P(x,y,z)对XY坐标平面对称变换时,只需改变z坐标的正负号,其它两坐标不变,因此,其变换的矩阵表示为:2021-11-7计算机图形学演示稿 纪玉波制作(C)20 100001000010000111zyxz
16、yx同样,相对于XZ平面的对称变换只需改变y坐标的正负号, 其变换的矩阵表示为: 100001000010000111zyxzyx2021-11-7计算机图形学演示稿 纪玉波制作(C)21相对于YZ平面的对称变换只需改变x坐标的正负号, 其变换的矩阵表示为: 100001000010000111zyxzyx如果需要相对于任一平面作对称变换时,可以将此平面转换成与某一坐标平面相重合,并运用上述简单的对称变换,然后再将平面反变换回原来的位置即可。2021-11-7计算机图形学演示稿 纪玉波制作(C)225.2.5 5.2.5 错切错切变换变换(Shear)(Shear) 在二维图形变换中,我们讨论
17、了相对于X 或Y轴的错切变换。在三维图形变换中,还可以产生相对于Z轴的错切变换。相对于三个坐标轴的错切变换矩阵表示为: 100001010111gehcfdzyxzyx 三维图形错切变换,一个坐标方向的变化受另外两个坐标变化的影响。如果变换矩阵第一列中元素c和e不为0,产生沿X轴方向的错切;第二列中元素d和g不为0,产生沿Y轴方向的错切;第三列中元素f和h不为0,产生沿Z轴方向错切。 同二维图形变换的情况相同,上面讨论的五种变换也属于仿射变换,具有保持直线、平面及平行关系的不变特性。2021-11-7计算机图形学演示稿 纪玉波制作(C)23 5.3 5.3 投影变换投影变换( (Project
18、ion Transformation) ) 人们观察自然界的物体时,所得视觉映像同观察点、观察方向有关。同样,要用计算机生成一幅三维视图,也需要确定观察点、观察方向观察点、观察方向,还需要将观察范围以外的部分图形裁剪图形裁剪掉。而且,由于图形输出设备通常都是二维的,还必须将三维图形转换到输出设将三维图形转换到输出设备的观察平面上,这一转换过程称为投影变换备的观察平面上,这一转换过程称为投影变换。下面讨论投影变换的实现。2021-11-7计算机图形学演示稿 纪玉波制作(C)245.3.1 5.3.1 投影变换分类投影变换分类(Projection transformation classific
19、ation) 在投影变换中,观察平面称为投影面观察平面称为投影面( (projection plane ) )。将三维图形投影到投影面上,有两种基本的投影方式,即平平行投影行投影( (parallel projection) )和透视投影和透视投影( (perspective projection) )。在平行投影中,图形沿平行线变换到投影面上在平行投影中,图形沿平行线变换到投影面上;对透视投影,图形沿收敛于某一点的直线变换到投影面上对透视投影,图形沿收敛于某一点的直线变换到投影面上,此点称为投影中心投影中心( (center of projection) ),相当于观察点,也称为视点视点(
20、(viewing position) )。投影线与投影面相交在投影面上形成的图象即为三维图形的投影。 平行投影和透视投影区别在于透视投影的投影中心到投透视投影的投影中心到投影面之间的距离是有限的,而平行投影的投影中心到投影面影面之间的距离是有限的,而平行投影的投影中心到投影面之间的距离是无限的之间的距离是无限的。当投影中心在无限远时,投影线互相平行,所以定义平行投影时,给出投影线的方向就可以了,而定义透视投影时,需要指定投影中心的具体位置。 2021-11-7计算机图形学演示稿 纪玉波制作(C)25下面是平行投影和透视投影的图例:2021-11-7计算机图形学演示稿 纪玉波制作(C)26 平行
21、投影保持物体的有关比例不变,这是三维绘图中产生比例图画的方法。物体的各个面的精确视图可以由平行投影得到。另一方面,透视投影不保持相关比例,但能够生成真实感视图。对同样大小的物体,离投影面较远的物体比离投影面较近物体的投影图象要小,产生近大远小的效果。 根据不同的投影需要,平行投影和透视投影还可以再分类,其关系大致如右所示:三点透视二点透视一点透视透视投影斜二测斜等测斜平行投影正三测正二测正等测正轴测投影侧视图俯视图主视图正投影正平行投影平行投影投影2021-11-7计算机图形学演示稿 纪玉波制作(C)275.3.2 5.3.2 平行投影平行投影( (parallel projection) )
22、 平行投影可根据投影方向与投影面的夹角分成两类:正投影和斜投影。当投影方向与投影面的夹角为90时,得到的投影为正平行投影,否则为斜平行投影, 如下图所示。2021-11-7计算机图形学演示稿 纪玉波制作(C)281 1正平行投影正平行投影( (orthographic parallel projection) 正平行投影根据投影面与坐标轴的夹角又可分成两类:正投影(三视图)和正轴测投影。当投影面与某一坐标轴垂直时,得到的投影为三视图,这时投影方向与这个坐标轴的方向一致。否则,得到的投影为正轴测投影,如下图所示。2021-11-7计算机图形学演示稿 纪玉波制作(C)29(1 1)正投影)正投影(
23、Orthographic projectio) 正投影有主视图(front view)、侧视图(side view)和俯视图(top view)三种,投影面分别与X轴、Y轴和Z轴垂直。三视图的投影变换矩阵分别为:1000010000000001vT侧视图:主视图:1000010000100000wT俯视图:1000000000100001hT2021-11-7计算机图形学演示稿 纪玉波制作(C)30 由于在三视图上保持了有关比例的不变性,可以精确地测量长度和角度等量,因此常用于工程制图。下图是一个三视图投影的例子。2021-11-7计算机图形学演示稿 纪玉波制作(C)31三维图形三视图投影变换
24、示例三维图形三视图投影变换示例2021-11-7计算机图形学演示稿 纪玉波制作(C)32(2 2)正轴测投影)正轴测投影(Axonometric projection) 正轴测投影是能够显示形体多个侧面的投影变换,如果投影平面不与任一坐标轴垂直,就形成正轴测投影。正轴测投影有正等测、正二测和正三测三种。当投影面与三个坐标轴之间的夹角都相等时为正等测;当投影面与两个坐标轴之间的夹角相等时为正二测;当投影面与三个坐标轴之间的夹角都不相等时为正三测。正等测投影中三个坐标分量保持相同的变化比例;正二测投影中三个坐标分量中的两个保持相同的变化比例;正三测投影中三个坐标分量的变化比例各不相同。2021-1
25、1-7计算机图形学演示稿 纪玉波制作(C)33 下面推导正轴测的投影变换矩阵。假定选定投影面垂直于Z轴,如下图(a)中虚线所示。首先将投影面绕Y轴逆时针旋转角,如图(a)中实线所示。再绕X轴顺时针旋转角,如图(b)中实线所示。最后在Z轴方向上作正投影,即得到正轴测投影的变换矩阵:2021-11-7计算机图形学演示稿 纪玉波制作(C)34100000000010000110000cossin00sincos0000110000cos0sin00100sin0cosT100000cossinsin00cos000sinsincos这也是一般形式的正三测投影变换矩阵。2021-11-7计算机图形学演
26、示稿 纪玉波制作(C)35三维图形正三测投影变换示例三维图形正三测投影变换示例2021-11-7计算机图形学演示稿 纪玉波制作(C)36完整的变换式表示如下: 100000cossinsin00cos000sinsincos11zyxzyx适当选取角和角,就可以得到正二测和正等测投影变换。2021-11-7计算机图形学演示稿 纪玉波制作(C)37例如绕Y轴旋转=45角,可以得到投影面与X轴和Z轴之间夹角相等的正二测投影,此时的变换矩阵为:100000sin222200cos000sin2222T三维图形正二测投影变换示例三维图形正二测投影变换示例2021-11-7计算机图形学演示稿 纪玉波制作
27、(C)38 对于正等测投影变换,根据定义,不同坐标轴上的单位矢量经变换后变化比例相同,其模应相等。利用正二测投影的变换矩阵,看sin和cos取何值时,才能变为正等测投影要求。不妨利用X轴和Y轴上的单位矢量变换进行推导:100000sin222200cos000sin222210011111zyx10sin22222021-11-7计算机图形学演示稿 纪玉波制作(C)39100000sin222200cos000sin222210101222zyx10cos02021-11-7计算机图形学演示稿 纪玉波制作(C)40根据定义应有:222222212121)()()()()()(zyxzyx即:2
28、22cos)sin22()22(求解可得:36sin,33sin2021-11-7计算机图形学演示稿 纪玉波制作(C)41因此正等测投影变换矩阵为:100000662200360006622T三维图形正等测投影变换示例三维图形正等测投影变换示例2021-11-7计算机图形学演示稿 纪玉波制作(C)422 2斜平行投影斜平行投影(slanting (slanting parallel projection) ) 斜平行投影与正平行投影的区别在于投影方向与斜平行投影与正平行投影的区别在于投影方向与投影面不垂直投影面不垂直。斜平行投影能够将正平行投影的可测斜平行投影能够将正平行投影的可测量性和正轴测
29、投影的立体效果特性结合起来量性和正轴测投影的立体效果特性结合起来。比如选择投影面垂直于某个坐标轴,这样,对平行于投影面的物体表面其长度和角度投影后保持不变,可进行测量。同时,它还可以显示一些其面。2021-11-7计算机图形学演示稿 纪玉波制作(C)43 斜平行投影的倾斜度可以由两个角来描述,如右图所示。此图中投影面选择垂直于Z坐标轴,且过原点。下面我们推导斜平行投影的变换矩阵。空间一点P(x,y,z)投影到投影面上的位置是(x,y,0),它的正投影坐标是(x,y,0)。从点(x,y,z)到点(x,y,0)的斜投影线与点(x,y,0)到点(x,y,0)的连线构成夹角,而此连线与投影面水平方向构
30、成夹角。记点(x,y,0)到点(x,y,0)的连线长度为L,则有:L=zctg2021-11-7计算机图形学演示稿 纪玉波制作(C)44从图中可以直接得出斜投影的坐标是:coscoszctgxLxxsinsinzctgyLyy于是,斜平行投影的投影变换矩阵斜平行投影的投影变换矩阵为:100000sincos00100001zctgctgT2021-11-7计算机图形学演示稿 纪玉波制作(C)45 常用的两种斜平行投影是斜等测斜等测和斜二测斜二测。当ctg=1,即投影方向与投影面成=45=45角时,得到的角时,得到的是斜等测投影是斜等测投影。这时,和投影面垂直的任何直线段,其投影的长度不变。当当
31、ctgctg=2=2(63.463.4)时,得到的)时,得到的是斜二测投影是斜二测投影,这时,和投影面垂直的任何直线,其投影的长度为原来的一半。而角通常选择为30或45,这将显示出一物体的前面、侧面和顶面(或底面)的立体视图。下图表示了立方体的斜二测投影的例子。从图中可以看出,这种图形的真实感较强。2021-11-7计算机图形学演示稿 纪玉波制作(C)46三维图形斜平行(等测、二测)投影变换示例三维图形斜平行(等测、二测)投影变换示例2021-11-7计算机图形学演示稿 纪玉波制作(C)475.3.3 5.3.3 透视投影透视投影( (perspective projection) ) 在平面
32、上表现三维立体感图形的方法是使用透视投影,通过近大远小近大远小的表现形式,形成真实感的视觉效果。下图是一示例:晚秋的的大道2021-11-7计算机图形学演示稿 纪玉波制作(C)48美国50号公路被称为全美最孤独的公路2021-11-7计算机图形学演示稿 纪玉波制作(C)49 透视投影不同于平行投影,它必须设定投影中心投影中心。投影中心也称为视点视点,它相当于观察者的眼睛。投影面投影面位于投影中心与需要投影的三维图形之间,位于投影中心与需要投影的三维图形之间,将三维图形将三维图形上各点与投影中心相连所得到的投影线与投影面相交,上各点与投影中心相连所得到的投影线与投影面相交,其交点就是三维图形的透
33、视投影其交点就是三维图形的透视投影。如下图所示,设投影中心在坐标原点,投影面与Z轴垂直,在z=d的位置上。2021-11-7计算机图形学演示稿 纪玉波制作(C)50设空间一点P(x,y,z)投影到投影面上的位置是P(x,y,d),将P和P点分别投影到XZ平面上和YZ平面上如下图(b)(c)所示,根据相似三角形对应边成比例的关系,可得:hyyzdyhxxzdx其中h=z/d。2021-11-7计算机图形学演示稿 纪玉波制作(C)51利用三维齐次坐标的矩阵形式表示透视变换为: 0000/1100001000011dzyxhzyxhhh称0000/110000100001dT为透视变换矩阵透视变换矩
34、阵。2021-11-7计算机图形学演示稿 纪玉波制作(C)52 投影平面上的投影坐标计算为:hyyhxxhh其中,原原z坐标值在透视投影中保持不变,以便用于其它坐标值在透视投影中保持不变,以便用于其它同深度有关的处理同深度有关的处理。 由上式可以看出,距离z位于分母处,即物体透视投影的大小与物体到投影中心的距离成反比,远处的物体比近处的物体的投影要小。这种效应所产生的视觉效果十分类似于照相系统和人的视觉系统。因此,透视投影能够产生立体感。2021-11-7计算机图形学演示稿 纪玉波制作(C)53 当三维图形用透视变换投影到投影面上,图形中与投影面平行的平行线投影后仍保持平行。不与投影面平行的不
35、与投影面平行的任一组平行线投影后收敛于一点,此点称为任一组平行线投影后收敛于一点,此点称为灭点灭点。每一组平行线都有其不同的灭点。一般说来,三维图形中有多少组平行线就有多少个灭点。 平行于某一坐标轴方向的平行线在投影面上形成的灭平行于某一坐标轴方向的平行线在投影面上形成的灭点又称作主灭点点又称作主灭点。因为有X、Y和Z三个坐标轴,所以主灭点主灭点最多有三个最多有三个。当某个坐标轴与投影面平行时,则该坐标轴方向的平行线在投影面上的投影仍保持平行,不形成灭点。投影中主灭点数目由与投影面相交的坐标轴数目来决定,并据此将透视投影分类为一点、二点或三点透视一点、二点或三点透视。一点透一点透视有一个主灭点
36、,即投影面与一个坐标轴正交,与另外两视有一个主灭点,即投影面与一个坐标轴正交,与另外两个坐标轴平行;两点透视有两个主灭点,即投影面与两个个坐标轴平行;两点透视有两个主灭点,即投影面与两个坐标轴相交,与另一个坐标轴平行;三点透视有三个主灭坐标轴相交,与另一个坐标轴平行;三点透视有三个主灭点,即投影面与三个坐标轴都相交。点,即投影面与三个坐标轴都相交。2021-11-7计算机图形学演示稿 纪玉波制作(C)54下图说明了一个立方体的一点透视投影和两点透视投影的情形。 前面的公式推导假设投影中心在坐标原点及投影面与Z轴垂直,对于不符合这种假设情形的透视投影,其变换关系的推导方法类似,或首先利用几何变换
37、方法对投影中心和投影面进行变换使其符合这种假定。2021-11-7计算机图形学演示稿 纪玉波制作(C)55三维图形透视投影变换示例三维图形透视投影变换示例2021-11-7计算机图形学演示稿 纪玉波制作(C)56附:附:OpenGL开发环境及绘图函数的用法开发环境及绘图函数的用法 一、一、 OpenGL (Open Graphics Library,开放图形接口,开放图形接口)简介简介 OpenGL是是SGI公司(公司(Silicon Graphics,美国硅图公司)1992年年7月发月发布的布的一个跨编程语言、跨平台的编程接口,一个跨编程语言、跨平台的编程接口,多年来一直持续扩展,多年来一直
38、持续扩展,2011年年8月发布了月发布了OpenGL 4.2。 OpenGL是一个开放的三维图形软件包,它独立于窗口系统和操作系是一个开放的三维图形软件包,它独立于窗口系统和操作系统,以它为基础开发的应用程序可以十分方便地在各种平台间移植,其统,以它为基础开发的应用程序可以十分方便地在各种平台间移植,其中中OpenGL与与Visual C+有着有着紧密接口,紧密接口, VC内嵌了内嵌了OpenGL,以,以便于利便于利用其实现有关计算和图形算法用其实现有关计算和图形算法。 OpenGL使用简便,效率高。它具有七大功能:使用简便,效率高。它具有七大功能: 1.建模建模:OpenGL图形库除了提供基
39、本的点、线、多边形的绘制函数图形库除了提供基本的点、线、多边形的绘制函数外,还提供了复杂的三维物体(球、锥、多面体等)以及复杂曲线和曲外,还提供了复杂的三维物体(球、锥、多面体等)以及复杂曲线和曲面绘制函数。面绘制函数。 2.变换变换:OpenGL图形库的变换包括基本变换和投影变换。基本变换图形库的变换包括基本变换和投影变换。基本变换有有平移、比例、旋转平移、比例、旋转等变换,投影变换有等变换,投影变换有平行投影平行投影(又称正射投影)和(又称正射投影)和透视投透视投 影影两种变换。两种变换。2021-11-7计算机图形学演示稿 纪玉波制作(C)57 3.颜色模式设置颜色模式设置:OpenGL
40、颜色模式有两种,即颜色模式有两种,即RGBA模式和颜色索模式和颜色索引(引(Color Index)。)。 4.光照和材质设置光照和材质设置:OpenGL光有辐射光(光有辐射光(Emitted Light)、环境光)、环境光(Ambient Light)、漫反射光()、漫反射光(Diffuse Light)和镜面光()和镜面光(Specular Light)。材质是用光反射率来表示。场景()。材质是用光反射率来表示。场景(Scene)中物体最终反映到人)中物体最终反映到人眼的颜色是光的红绿蓝分量与材质红绿蓝分量的反射率相乘后形成的颜眼的颜色是光的红绿蓝分量与材质红绿蓝分量的反射率相乘后形成的颜
41、色。色。 5:纹理映射纹理映射(Texture Mapping):利用利用OpenGL纹理映射功能可以十纹理映射功能可以十分逼真地表达物体表面细节。分逼真地表达物体表面细节。 6:位图显示和图象增强:位图显示和图象增强:图象功能除了基本的拷贝和像素读写外,图象功能除了基本的拷贝和像素读写外,还提供融合(还提供融合(Blending)、反走样()、反走样(Antialiasing)和雾()和雾(fog)的特殊图)的特殊图象效果处理。以上三条可使被仿真物更具真实感,增强图形显示的效果。象效果处理。以上三条可使被仿真物更具真实感,增强图形显示的效果。 7:双缓存动画:双缓存动画(Double Buf
42、fering):双缓存即前台缓存和后台缓):双缓存即前台缓存和后台缓存,简言之,后台缓存计算场景、生成画面,前台缓存显示后台缓存已存,简言之,后台缓存计算场景、生成画面,前台缓存显示后台缓存已画好的画面。画好的画面。 此外,利用此外,利用OpenGL还能实现还能实现深度测试深度测试(Depth Test)等特殊效果)等特殊效果, ,从从而实现了消隐算法。而实现了消隐算法。2021-11-7计算机图形学演示稿 纪玉波制作(C)58 OpenGLOpenGL也是图形硬件的一种软件接口。这个接口包含的也是图形硬件的一种软件接口。这个接口包含的函数超过函数超过700700个个,这些函数可以用于指定物体
43、和操作,创建交互式的三维应用程,这些函数可以用于指定物体和操作,创建交互式的三维应用程序,序,函数的实现一般会与计算机配置的图形卡有关函数的实现一般会与计算机配置的图形卡有关。二、基本的二、基本的OpenGL语法语法 OpenGLOpenGL基本库中的函数名要以基本库中的函数名要以glgl为前缀,且函数名中每一组成词为前缀,且函数名中每一组成词的第一个字母要大写。如:的第一个字母要大写。如:glBeginglBegin , , glClearglClear 有些函数要求一个或多个变量用符号常量赋值,如参数名、参有些函数要求一个或多个变量用符号常量赋值,如参数名、参数的值或特定的模式。这些常量均
44、以大写字母数的值或特定的模式。这些常量均以大写字母GLGL开头。另外,常量名开头。另外,常量名词中各组成词均采用大写,单词之间用下划线(词中各组成词均采用大写,单词之间用下划线(_ _)分隔开。)分隔开。如:如:GL_RGB,GL_POLYGONGL_RGB,GL_POLYGON OpenGL OpenGL函数也要求专门的数据类型。采用专门的内置数据类型名函数也要求专门的数据类型。采用专门的内置数据类型名来描述数据类型。来描述数据类型。如:如:GLbyteGLbyte , Glint , , Glint , GlfloatGlfloat 2021-11-7计算机图形学演示稿 纪玉波制作(C)5
45、9三、相关函数库三、相关函数库 1OpenGL核心库核心库。描述图元、属性、几何变换、观察变换和进。描述图元、属性、几何变换、观察变换和进行许多其他的操作。引用核心库函数开头前缀为行许多其他的操作。引用核心库函数开头前缀为gl。 2OpenGL实用函数实用函数(GLU)。提供了一些例程,可以设置观)。提供了一些例程,可以设置观察和投影矩阵,利用线条和多边形近似法来描述复杂对象,函数名的察和投影矩阵,利用线条和多边形近似法来描述复杂对象,函数名的前缀为前缀为glu。 3OpenGL 实用函数工具库实用函数工具库(GLUT)。提供了与任意屏幕窗口)。提供了与任意屏幕窗口系统进行交互的函数库。系统进
46、行交互的函数库。GLUT库的函数名前缀为库的函数名前缀为glut。 四、头文件及库函数四、头文件及库函数 编程时,编程时,需要包含相应函数的头文件以引入需要包含相应函数的头文件以引入OpenGL函数库。例函数库。例如如#include,#include,#include等。等。另外,也要另外,也要引入引入V VC程序所需要的头文件。程序所需要的头文件。例如例如#include , #include 。 系统配置时,系统配置时,要将开发库中的要将开发库中的.h文件拷贝到文件拷贝到VC的的 Include GL目目录中;将录中;将.lib文件拷贝到文件拷贝到VC的的 lib目录中;将目录中;将.d
47、ll文件拷贝到操作系统文件拷贝到操作系统的的system32目录中目录中, ,或在程序中说明引用这些文件的位置。或在程序中说明引用这些文件的位置。 2021-11-7计算机图形学演示稿 纪玉波制作(C)60五、函数举例五、函数举例 1变换函数变换函数 移动变换函数:移动变换函数:void glTranslatef(GLfloat x, GLfloat y, GLfloat z); 比例变换函数:比例变换函数:void glScalef(GLfloat x, GLfloat y, GLfloat z); 旋转变换函数:旋转变换函数: void glRotatef(GLfloat angle, G
48、Lfloat x,GLfloat y,GLfloat z) 指定按照从原点到点(x,y,z)的直线进行旋转的角度。 2投影函数投影函数 (1)正投影 void glOrtho(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble nearVal, GLdouble farVal); 创建一个正交平行的视景体。参数和glFrustrum一样。 如果是把二维图像投影到二维屏幕这种情况,可以使用OpenGL工具函数库中的gluOrtho2D函数。它与它的三维版本glOrtho基本相同。 不特别指定时,不特别指定时
49、, glOrtho函数缺省的视点都在原点,视线沿函数缺省的视点都在原点,视线沿Z Z轴指向负方向。轴指向负方向。 (2)透视投影: 1 void glFrustum(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble nearVal, GLdouble farVal);2021-11-7计算机图形学演示稿 纪玉波制作(C)61 参数分别指定了垂直裁剪平面的左右位置、水平裁剪平面的上下位置以及视点视点离深度裁剪平面的近、远距离。 glFrustrum定义了一个平截头体,它计算一个用于实现透视投影的矩阵,并把
50、它与当前的投影矩阵(一般为单位矩阵)相乘。注意:平截头体并不要求一定是对称的,它的轴也不需要与Z轴对齐。 2 void gluPerspective(GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar); 参数fovy表示眼睛张开的角度(0-180)。aspect表示纵横比x/y。zNear和zFar分别表示观察者离近远裁剪平面的距离。 注意:gluPerspective仅限于创建沿视线方向同时对称与x轴和y轴的平截头体。但是通常所需要的也就是这种平截头体。 glFrustum与与gluPerspective函数的作用与原
51、理差不多,都只是函数的作用与原理差不多,都只是为了定义一个棱台形状的视景体(在其坐标内部可以看得见,在其坐为了定义一个棱台形状的视景体(在其坐标内部可以看得见,在其坐标外就看不见标外就看不见-不能正常在屏幕坐标中显示),一个通过坐标来定不能正常在屏幕坐标中显示),一个通过坐标来定位可视棱台大小,另外一个是通过角度来定位可视棱台大小。位可视棱台大小,另外一个是通过角度来定位可视棱台大小。 不特别指定时,以上两个函数缺省的视点都在原点,视线沿不特别指定时,以上两个函数缺省的视点都在原点,视线沿Z Z轴轴指向负方向。指向负方向。 2021-11-7计算机图形学演示稿 纪玉波制作(C)62 3、视图变
52、换(变换视点及方向)(变换视点及方向) void gluLookAt(GLdouble eyeX , GLdouble eyeY , GLdouble eyeZ , GLdouble centerX , GLdouble centerY , GLdouble centerZ , GLdouble upX , GLdouble upY , GLdouble upZ ); 相当于设置视点及方向设置视点及方向。 其参数分别表示:前三个参数表示:前三个参数表示眼睛位置,中间三个参数表示看中间三个参数表示看向的点(即方向)的点(即方向)、最后三个参数表示最后三个参数表示哪个方向是朝上的,通常取,通常取Y
53、轴的正方向,即(轴的正方向,即(0,1,0)。(以上函数缺省时,视点都在原点,视线沿以上函数缺省时,视点都在原点,视线沿Z轴指向负方向轴指向负方向 ) 4、视口变换 void glViewport(GLint x, GLint y, GLsizei width, GLsizei height); 决定场景所映射的有效屏幕区域的形状,设置视口及像素将要显示的区域。参数分别指定窗口内部有效屏幕空间的原点(注意(0,0)表示窗口的左下角)以及有效屏幕区域的宽度和高度。2021-11-7计算机图形学演示稿 纪玉波制作(C)63六、六、OpenGL中的图形操作中的图形操作 在OpenGL中,如果想对图形
54、进行操作,就要对这个图形的状态(当前的矩阵)乘上这个操作对应的一个矩阵。 如果乘以变换矩阵如果乘以变换矩阵(平移平移, 缩放缩放, 旋转旋转), 相乘之后,图形的位置被变换相乘之后,图形的位置被变换。 如果三维图形乘以投影矩阵如果三维图形乘以投影矩阵, 相乘后相乘后, 图形的投影方式被设置。图形的投影方式被设置。 用来指定乘以什么类型矩阵的函数,是glMatriMode(GLenum mode)。glMatrixMode有3种模式: GL_PROJECTION 投影, GL_MODELVIEW 模型视图 , G L _ T E X T U R E 纹 理 。 其 中 三 维 图 形 投 影 会
55、 使 用glMatriMode(GL_PROJECTION)和glMatriMode(GL_MODELVIEW) 例如要对三维图形进行透视投影,编程时可以是: /设置当前矩阵为投影矩阵设置当前矩阵为投影矩阵 glMatrixMode(GL_PROJECTIONglMatrixMode(GL_PROJECTION);); / /设置单位矩阵设置单位矩阵 glLoadIdentityglLoadIdentity();(); /设置透视投影矩阵设置透视投影矩阵 gluPerspective(90.0, 1.0, 1.0, 20);gluPerspective(90.0, 1.0, 1.0, 20);
56、 / /设置当前矩形到模型视景矩阵设置当前矩形到模型视景矩阵 glMatrixMode(GL_MODELVIEWglMatrixMode(GL_MODELVIEW); ); ( (后续是完成图形变换及绘制的相关语句后续是完成图形变换及绘制的相关语句) )2021-11-7计算机图形学演示稿 纪玉波制作(C)64七、七、main函数的主要语句函数的主要语句 使用OpenGL函数编程使一般使用C语言形式,控制函数是main主函数。 main函数一般会用到的几个函数。 1 1、glutInitglutInit,对,对GLUTGLUT进行初始化。当用到进行初始化。当用到glutglut开头的函数时,这
57、个函开头的函数时,这个函数对必须在其它的数对必须在其它的GLUTGLUT使用之前调用一次。一般照抄这句使用之前调用一次。一般照抄这句glutInit(&argcglutInit(&argc, , argvargv) )就可以了。就可以了。 2 2、 glutInitDisplayModeglutInitDisplayMode,设置显示方式,其中,设置显示方式,其中GLUT_RGBGLUT_RGB表示使用表示使用RGBRGB颜色,与之对应的还有颜色,与之对应的还有GLUT_INDEXGLUT_INDEX(表示使用索引颜色)。(表示使用索引颜色)。GLUT_SINGLEGLUT_S
58、INGLE表表示使用单缓冲,与之对应的还有示使用单缓冲,与之对应的还有GLUT_DOUBLEGLUT_DOUBLE(使用双缓冲)。(使用双缓冲)。 3 3、glutInitWindowPositionglutInitWindowPosition,设置窗口在屏幕中的位置。,设置窗口在屏幕中的位置。 4 4、glutInitWindowSizeglutInitWindowSize,设置窗口的大小。,设置窗口的大小。 5 5、glutCreateWindowglutCreateWindow,根据前面设置的信息创建窗口。,根据前面设置的信息创建窗口。 6 6、glutDisplayFuncglutDi
59、splayFunc,当需要进行画图时,这个函数就会被调用。,当需要进行画图时,这个函数就会被调用。 7 7、glutMainLoopglutMainLoop,进行消息循环。,进行消息循环。 2021-11-7计算机图形学演示稿 纪玉波制作(C)65八、编程举例八、编程举例 / OpenGL图形变换编程示例图形变换编程示例.cpp : Defines the entry point for the console application./#include stdafx.h/OpenGL头文件头文件#include /控制变量署名控制变量署名float horiz_x = 0; /水平移动控制变
60、量水平移动控制变量float vert_y = 0; /垂直移动控制变量垂直移动控制变量float dist_z = 0; /远近移动控制变量远近移动控制变量float rotate_angle = 0; /旋转移动控制变量旋转移动控制变量/显示主函数显示主函数void display(void) /复位颜色、深度缓冲区复位颜色、深度缓冲区 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); /设置当前矩阵为投影矩阵设置当前矩阵为投影矩阵 glMatrixMode(GL_PROJECTION); /设置单位矩阵设置单位矩阵 glLoadIdentity(); 20
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电气课程设计报告论文
- 零售贷款合同三篇
- 道路工程师工作总结
- 妇产科护士工作总结
- 门诊部医生团队近期工作总结
- 2023-2024学年重庆市七校联盟高一(下)期中语文试卷
- 教材选用与内容审定计划
- 包装设计师的主要职责
- 医疗行业顾问工作概述
- 【八年级下册地理粤教版】7.4 北京市 同步练习
- 《客房服务与管理》课程标准课程内容与要求
- GB 26920-2024商用制冷器具能效限定值及能效等级
- 备用电源使用安全管理制度
- 试卷(完整版)python考试复习题库复习知识点试卷试题
- 能源中国学习通超星期末考试答案章节答案2024年
- 鱼塘租赁合同模板8篇
- 中学美育(艺术教育)工作发展年度报告
- GB/T 44679-2024叉车禁用与报废技术规范
- 生活垃圾焚烧发电项目特许经营权采购投标方案
- 2024至2030年中国港口机械设备行业发展现状调研与竞争格局报告
- 车辆驾驶业务外包服务方案
评论
0/150
提交评论