计算机图形学2
计算机图形学基础教程(第2版)

图书前言
本书是在2005版《计算机图形学基础教程》的基础上修订而成。 《计算机图形学基础教程》是根据作者在清华大学多年教学实践,并参考了国内外最新的相关教材和部分最 新的研究成果编写而成。第2版教材主要修订了以下内容: 1.增加了第1章的1.5节,介绍清华大学近年来的最新研究成果。 2.增加了第3章的3.9节,介绍格表示、简化与细分。 3.增加了第4章的4.1节,介绍图形绘制的基本概念和流程,提高本章整体上的可读性。 4.将第4章4.8节层次细节的内容移入第3章的3.9节,增加有关景物模拟的内容。 5.删除第5章VRML的内容,改写Open GL的内容,增加一些常见的功能,并给出更多的示例。 本教程第1版出版4年来,被国内一大批高等院校采用,相关的老师、同学及读者提出了许多宝贵的建议,在 此表示衷心感谢。徐昆、来煜坤参与了第2版教材的修订,在此也一并表示感谢。
序言
清华大学计算机系列教材已经出版发行了近30种,包括计算机专业的基础数学、专业技术基础和专业等课程 的教材,覆盖了计算机专业大学本科和研究生的主要教学内容。这是一批至今发行数量很大并赢得广大读者赞誉 的书籍,是近年来出版的大学计算机教材中影响比较大的一批精品。
本系列教材的作者都是我熟悉的教授与同事,他们长期在第一线担任相关课程的教学工作,是一批很受大学 生和研究生欢迎的任课教师。编写高质量的大学(研究生)计算机教材,不仅需要作者具备丰富的教学经验和科 研实践,还需要对相关领域科技发展前沿的正确把握和了解。正因为本系列教材的作者们具备了这些条件,才有 了这批高质量优秀教材的出版。可以说,教材是他们长期辛勤工作的结晶。本系列教材出版发行以来,从其发行 的数量、读者的反映、已经获得的许多国家级与省部级的奖励,以及在各个高等院校教学中所发挥的作用上,都 可以看出本系列教材所产生的社会影响与效益。
计算机图形学第2章图形系统

2、荫罩式
根据屏幕上荧光点的排列不同,控制栅也就不 一样。普通的显示器一般用三角的排列方式,这 种显像管被称为荫罩式显像管。荫罩法常用于光 栅扫描系统,因为它能产生的彩色范围比电子束 穿透法宽广得多。
三色荧光屏
荫罩
三个电子枪
能显示16兆种颜色的显示系统叫做真彩色显示系统
3、荫栅式
普通的显象管采用的都是荫罩式显象管,显象管 的表面呈略微凸起的球面状,故称之为“球面管”。 荫罩式球面显示器几何失真大,而且三角形的荧光 点排列造成即使点很密很细也不会特别清晰,所以 近几年荫栅式显示器逐渐流行起来。
喷绘仪实物图
四、静电设备
静电设备沿纸的宽度方向一次一整行地置负电 荷于纸上,尔后,面对调色剂曝光。调色剂充以 正电,被吸引到充以负电的区域,从而产生指定 的输出。 静电绘图仪分辨率可达200dpi,其速度比笔绘 仪高,运行可靠,噪声小,但用纸特殊而价格昂 贵。
静电绘图仪结构图
五、电热式设备
电热式利用点阵打印头的热度,在热感应纸上输 出图案。
二、激光设备
在激光设备里,激光束把要打印的图形写在感光 鼓上,鼓再把这一图形转移到纸上。激光打印机 的主要构成部分有感光鼓、炭粉、打底电晕丝和 转移电晕丝。
激光打印机结构图
三、喷墨设备
喷墨法产生的输出,是沿包裹在鼓上的纸卷逐行 喷墨水来实现的。在高压下墨水形成墨雾,充电 荷的墨雾在电场控制下发生偏转,将墨雾喷印到 纸上。
热升华打印机
六、笔绘仪
笔绘仪有一支或多支笔安装在横跨纸的笔架或滑杆 上,各种彩色和不同粗细的笔用来绘制各种阴影和 线型。与前面几种点阵硬拷贝设备不同,笔绘仪属 于随机画线硬拷贝设备。 笔绘仪的绘图速度取决于绘图笔移动的速度和 加速度。这里,加速度和笔绘仪笔头的质量有关。
计算机图形学2

当 △x>△y 时,让 x 从 x1 到 x2 变化,每
步递增 1,
那么,x 的变化可以表示为 xi+1=xi+1
y 的变化可以表示为 yi+1=yi+k
2.1.1 直线DDA算法 (Digital Differential Analyser)
用上式可求得图中直线 P1P2 和 y 向网格线的交点, 但显示时要用舍入, 找到 最靠近交点处的象素点耒 表示。 当 △x<△y 时,让 y 递 增 1,x作相应变化。
2.1.1 直线的扫描转换——中点画线算法
在d≥0时,取正右方像素点P1,则下一个中点M 坐标:M1(xp+2,yp+0.5),则下一个像素点的判 别式 d1=F(xp+2,yp+0.5)=a(xp+2)+b(yp+0.5)+c=d+a 故d的增量为a。
而若d<0,则取右上方像素点P2,则下一个中点M 坐标:M2(xp+2,yp+1.5),则下一个像素点的判 别式
2.1.2 直线Bresenham算法( 续)
求误差的初值P1,可将x1、y1和b代入式(2.4)中的xi、 yi而得到 P1 = 2dydx 综述上面的推导,第1a象限内的直线Bresenham算法 思想如下: ⒈ 画点(x1, y1),dx=x2x1,dy=y2y1,计算误差初值 P1=2dy dx,i=1; ⒉ 求直线的下一点位置 xi+1 = xi + 1 如果Pi>0,则yi+1=yi+1,否则yi+1=yi; ⒊ 画点(xi+1, yi+1); ⒋ 求下一个误差Pi+1,如果Pi>0,则Pi+1=Pi+2dy2dx, 否则 Pi+1=Pi+2dy; ⒌ i=i+1;如果i<dx+1则转步骤2;否则结束操作。
《计算机图形学》练习试题及参考答案(二)

《计算机图形学》练习试题及参考答案二、选择题(每题2分)B 1、计算机图形学与计算几何之间的关系是( )。
A)学术上的同义词B)计算机图形学以计算几何为理论基础C)计算几何是计算机图形学的前身D).两门毫不相干的学科B 2、计算机图形学与计算机图象学的关系是( )。
A)计算机图形学是基础,计算机图象学是其发展B)不同的学科,研究对象和数学基础都不同,但它们之间也有可转换部分C)同一学科在不同场合的不同称呼而已D)完全不同的学科,两者毫不相干C 3、触摸屏是( )设备。
A)输入B)输出C)输入输出D)既不是输入也不是输出B 4.计算机绘图设备一般使用什么颜色模型?( )A)RGB;B)CMY;C)HSV ;D)HLS A 5. 计算机图形显示器一般使用什么颜色模型?( )A)RGB;B)CMY;C)HSV ;D)HLS C 6.分辨率为1024×1024的显示器各需要多少字节位平面数为24的帧缓存?( )A)512KB;B)1MB;C)2MB ;D)3MBD 7.哪一个不是国际标准化组织(ISO)批准的图形标准?( )A)GKS;B)PHIGS;C)CGM ;D)DXF C8.下述绕坐标原点逆时针方向旋转a角的坐标变换矩阵中哪一项是错误的? ( )| A B || C D |A) cos a;B) sin a;C) sin a;D) cos aA 9、在多边形的逐边裁剪法中,对于某条多边形的边(方向为从端点S 到端点P)与某条裁剪线(窗口的某一边)的比较结果共有以下四种情况,分别需输出一些顶点.请问哪种情况下输出的顶点是错误的? ( )A)S和P均在可见的一侧,则输出S和P.B)S和P均在不可见的一侧,则输出0个顶点.C)S在可见一侧,P在不可见一侧,则输出线段SP与裁剪线的交点.D)S在不可见的一侧,P在可见的一侧,则输出线段SP与裁剪线的交点和P.C 10、在物体的定义中对边的哪条限制不存在? ( )A) 边的长度可度量且是有限的B) 一条边有且只有两个相邻的面C) 一条边有且只有两个端点D) 如果一条边是曲线,那么在两个端点之间不允许曲线自相交D11.下述哪一条边不是非均匀有理B样条(NURBS)的优点? ( )A) NURBS比均匀B样条能表示更多的曲面B) 对于间距不等的数据点,用NURBS拟合的曲线比用均匀B 样条拟合的曲线更光滑C) NURBS提供的权控制方法比用控制点更能有效的控制曲线的形状D) 使用NURBS可以提高对曲面的显示效率C 12.下列关于图的存储表示的叙述中,哪一个是不正确的?A) 无向图的相邻矩阵是对称矩阵B) 对于带权的图,其相邻矩阵中值为1的元素,其值可以用边的权来权替C) 用邻接表法存储包括n个结点的图需要保存一个顺序存储的结点表和n个链接存储的边表D) 用邻接表法存储包括n条边的图需要保存一个顺序存储的结点表和n个链接存储的边表C13*.在面片的数量非常大的情况下哪一个消隐算法速度最快? ( )A) 深度缓存算法(Z-Buffer)B) 扫描线消隐算法C) 深度排序算法(画家算法)D) 不知道B14*.下面关于深度缓存消隐算法(Z-Buffer)的论断哪一条不正确? ( )A) 深度缓存算法并不需要开辟一个与图像大小相等的深度缓存数组B) 深度缓存算法不能用于处理对透明物体的消隐C) 深度缓存算法能并行实现D) 深度缓存算法中没有对多边形进行排序D15.在用射线法进行点与多边形之间的包含性检测时,下述哪一个操作不正确? ( )A) 当射线与多边形交于某顶点时且该点的两个邻边在射线的一侧时,计数0次B) 当射线与多边形交于某顶点时且该点的两个邻边在射线的一侧时,计数2次C) 当射线与多边形交于某顶点时且该点的两个邻边在射线的两侧时,计数1次D) 当射线与多边形的某边重合时,计数1次D 16*、扫描消隐算法在何处利用了连贯性(相关性Coherence)?(1)计算扫描线与边的交点;(2)计算多边形在其边界上的深度;(3)计算多边形视窗任意点处的深度值;(4)检测点与多边形之间的包含性。
计算机图形学二、多边形的扫描转换算法

2
做一个
E
2
A
C C
2
D
B
2
局部极大或局部极小点, 交点看做是二个
非局部极值点,交点看
2
做一个
E
非局部极值点将这些相
邻边分割开来
2
A
如何计算扫描线与多边形边界线的所有交点?
若扫描线yi与多边形边界线交点的x坐标是xi, 则对下一条扫描线yi+l,它与那条边界线的交点的x 坐标xi+1,可如下求出:
m
yi1 yi xi1 xi
, yi1
yi
1
xi 1
xi
1 m
扫描线与多边形边的交点计算 C
B
yk 1 yk
x AC k 1
xkAC
1 mAC
x BC k 1
xkBC
1 mBC
A
活跃(活性)边:与当前扫描线相交的边 活跃(活性)边表AET:存贮当前扫描线相交的各边的表。
ymax x 1/m next
…
扫描线5 扫描线6
e2 92 0
e2 92 0
e6 5 13 6/4 λ
e5 11 13 0 λ
9∧
8∧
e3
e4
7
9 7 -5/2
11 7 6/4 λ
e5
6
11 13 0 λ
5∧
e2
e3
4
9 2 0λ
3∧
e2
2∧
e1
e6
1
3 7 -5/2
5 7 6/4 λ
e1
0∧
ymax xmin 1/m
e4 e5
e6 5 111/2 6/4 λ
9∧
计算机图形学CHP2图形系统

2.1 图形系统的基本功能和体系结构
二、图形系统硬件性能要求:
处理速度(与硬件、软件和处理算法都有关) 存储容量(内存、外存、显存) 处理精度(图形分辨率、色彩显示等)
2.1 图形系统的基本功能和体系结构
三、计算机图形系统的基本组成:
图形应用数据结构
图形软件
图形应用软件
图
形
图形支撑软件
系
统
2.3 图形显示系统
2.3.1 图形显示系统的组成:
1. 显示器—图形显示设备; 2. 显示卡— 又名显示适配器,将CPU送来的图形
信号经过处理后输送至显示器。 显示卡工作过程: 1)CPU通过总线将数据传送到显示芯片; 2)显示芯片对数据处理并将结果存放在显存中; 3)显卡从显存中将数据传送到RAMDAC(数模转换芯 片)并进行数模转换; 4)RAMDAC将模拟信号输送到显示器。
2.3.2 图形显示设备
一、CRT显示器:
刷新式CRT显示器 光栅扫描显示器 随机扫描显示器 彩色CRT显示器 直视存储管显示器
2.3.2 图形显示设备 (一) 刷新式 CRT (Cathode Ray Tube)
工作原理:电子枪(Electron Gun)发射电子束,经过 聚焦系统(Focusing System)、偏转系统(Deflection System)的作用,轰击到荧光屏的不同部位,被其内表 面的荧光物质吸收,发光产生可见的图形。
• CGI--Computer Graphics Interface(图形接口) • OpenGL--Open Graphics Library(较流行,业
界认可)
2.2 图形软件和标准
• GKS-计算机图形核心系统
• ISO的第一个图形软件标准(第一个官方标准, 1977)
最新2019-计算机图形学第二章-PPT课件

是一维线性表,其每一项的内容对应一种颜色,它的 长度由帧缓存单元的位数决定,例如:每单元有8位, 则查色表的长度为28=256 目的:在帧缓存单元的位数不增加的情况下,具有大 范围内挑选颜色的能力:
2.1.4 光栅扫描的示系统 存放方式
颜色信息在帧缓存中两种存放方式:一是颜色值 直接存储在帧缓存中。二是把颜色码放在一个独 立的表中,帧缓存存放的是颜色表中各项的索引 值,颜色范围扩充了。 单色系统:查色表固化 彩显:可修改、创建查色表。
GKS
-- 提供了在应用程序和图形输入输出设备之间的 功能接口。 -- 与语言无关。 -- GKS提供了一个称为元文件的顺序文件接口 -- 应用程序的所有图形资源由GKS控制(通过 GKS元文件-GKSM) -- GKSM用于:图形信息存档;系统传送图形信息;
在GKS应用程序间传送图形信息; 与图形信息相关的非图形信息的存储和复用。
2.1 图形显示器
2.1.1 阴极射线管
2.1.2 彩色阴极射线管 射线穿透法 影孔板法 2.1.3 随机扫描显示系统
2.1.4 光栅扫描系统
2.1.1 阴极射线管
阴极射线管(CRT)
–组成:包括电子枪、聚焦系统、加速电极、偏转系统、荧光屏 –工作原理:电子枪发射电子束,经过聚焦系统、加速电极、
2.1.2 彩色阴极射线管
影孔板法
原理:影孔板被安装在荧光屏的内表面,用于精 确定位像素的位置
影孔板
外层玻璃
荧光涂层
2.1.2 彩色阴极射线管
影孔板的类型 点状影孔板 代表:大多数球面与柱面显像管 栅格式影孔板 代表:Sony的Trinitron与Mitsubishi的 Diamondtron显像管
计算机图形学课件之第2章图形输入输出设备

颜色模式决定了图像中颜色的表示方式,常见的颜色模式有RGB、CMYK等。不 同的颜色模式适用于不同的应用场景,例如RGB适用于显示器显示,CMYK适用 于印刷。
扫描速度
扫描速度
扫描速度是指扫描仪在单位时间内能够扫描的面积,通常以 平方英寸/分钟(sq in/min)或毫米/秒(mm/s)表示。扫 描速度越快,扫描大型图像所需的时间就越短。
扫描类型
扫描类型包括平板扫描、胶片扫描和3D扫描等,不同类型的 扫描仪适用于不同的应用场景。平板扫描仪适用于普通文档 和照片扫描,胶片扫描仪适用于胶片扫描,3D扫描仪适用于 物体表面形状和纹理的扫描。
打印速度
打印速度
打印速度是指打印机在单位时间内能够打印的页面数量,通常以页/分钟( ppm)或页/秒(pps)表示。打印速度越快,打印大型文件所需的时间就越短 。
打印技术
打印技术是影响打印速度的重要因素,常见的打印技术有喷墨、激光、热转印 等。不同类型的打印技术适用于不同的应用场景,例如喷墨打印机适用于彩色 打印,激光打印机适用于黑白文档打印。
04
图形输入输出设备的 应用
办公自动化
文字处理
使用图形输入设备如键盘和鼠标 进行文档编辑,输出设备如打印 机进行打印输出。
数据可视化
利用图形输出设备展示数据,如 柱状图、饼图等,便于理解和分 析。
图像处理
图片编辑
使用图形输入设备如数码相机、扫描 仪获取图片,通过图形处理软件进行 编辑,再由输出设备如打印机输出。
特效制作
利用图形处理软件进行特效制作,如 滤镜、色彩调整等,丰富图像表现力 。
计算机辅助设计(CAD)
绘图设计
等。
触摸屏在移动设备和一些桌面应 用中广泛使用。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
中国地质大学(武汉)课题:计算机图形学班级:191113姓名:杨耀鹏源程序#include<gl/glut.h>#include<iostream.h>#include<stdlib.h>typedef struct dePt{int x;int y;}dePt;void fill(GLint x1,GLint y1,GLint z1) {glBegin(GL_POINTS);glVertex3f(x1,y1,0.0f);glEnd();}typedef struct Edge{int yUpper;float xIntersect, dxPerScan;struct Edge *next;}Edge;void insertEdge(Edge *list, Edge *edge) {Edge *p,*q=list;p=q->next;while(p!=NULL){if(edge->xIntersect<p->xIntersect)p=NULL;else{q=p;p=p->next;}}edge->next=q->next;q->next=edge;}int yNext(int k, int cnt, dePt*pts){int j;if((k+1)>(cnt-1))j=0;elsej=k+1;while(pts[k].y==pts[j].y)if((j+1)>(cnt-1))j=0;else j++;return (pts[j].y);}void makeEdgeRec(dePt lower, dePt upper,int yComp,Edge *edge,Edge *edges[]) {edge->dxPerScan=(float)(upper.x-lower.x)/(upper.y-lower.y);edge->xIntersect=lower.x;if(upper.y<yComp)edge->yUpper=upper.y-1;elseedge->yUpper=upper.y;insertEdge(edges[lower.y],edge);}void buildEdgeList(int cnt,dePt *pts,Edge *edges[]){Edge *edge;dePt v1,v2;int i,yPrev=pts[cnt-2].y;v1.x=pts[cnt-1].x;v1.y=pts[cnt-1].y;for(i=0;i<cnt;i++){v2=pts[i];if(v1.y!=v2.y){edge=(Edge *)malloc(sizeof(Edge));if(v1.y<v2.y)makeEdgeRec(v1,v2,yNext(i,cnt,pts),edge,edges);elsemakeEdgeRec(v2,v1,yPrev,edge,edges);}yPrev=v1.y;v1=v2;}}void buildActiveList(int scan,Edge *active,Edge *edges[]){Edge *p,*q;p=edges[scan]->next;while(p)q=p->next;insertEdge(active,p);p=q;}}void fillScan(int scan,Edge *active){Edge *p1,*p2;int i;p1=active->next;while(p1){p2=p1->next;for(i=p1->xIntersect;i<p2->xIntersect;i++) fill((int)i,scan,3);p1=p2->next;}}void deleteAfter(Edge *q){Edge *p=q->next;q->next=p->next;free(p);}void updateActiveList(int scan,Edge *active) {Edge *q=active, *p=active->next;while(p)if(scan>=p->yUpper){p=p->next;deleteAfter(q);}else{p->xIntersect=p->xIntersect+p->dxPerScan; q=p;p=p->next;}void resortActiveList(Edge *active) {Edge *q,*p=active->next;active->next=NULL;while(p){q=p->next;insertEdge(active,p);p=q;}}void scanFill(int cnt,dePt *pts){Edge *edges[1024],*active;int i,scan;for(i=0;i<1024;i++){edges[i]=(Edge *)malloc(sizeof(Edge)); edges[i]->next=NULL;}buildEdgeList(cnt,pts,edges);active=(Edge *)malloc(sizeof(Edge)); active->next=NULL;for(scan=0;scan<1024;scan++){buildActiveList(scan,active,edges);if(active->next){fillScan(scan,active); updateActiveList(scan,active); resortActiveList(active);}}}void ChangeSize(GLsizei w,GLsizei h) {GLfloat nRange=400.0f;if(h==0) h=1;glViewport(0,0,w,h);glMatrixMode(GL_PROJECTION);glLoadIdentity();if(w<=h)glOrtho(-nRange,nRange,-nRange*h/w,nRange*h/w,-nRange,nRange);elseglOrtho(-nRange*h/w,nRange*h/w,-nRange,nRange,-nRange,nRange); glMatrixMode(GL_MODELVIEW);glLoadIdentity();}void Display(void){int n,x,y,i;cout<<"请输入多边形顶点数:"<<endl;cin>>n;dePt *t=new dePt[n];for(i=0;i<n;i++){cout<<"请输入第"<<i+1<<"个顶点坐标"<<endl;cin>>x>>y;t[i].x=x;t[i].y=y;glVertex2i(t[i].x,t[i].y);}glEnd();glFlush();scanFill(n,t);glFlush();glutPostRedisplay();}void Initial(void){glClearColor(2.0f,2.0f,2.0f,2.0f);glMatrixMode(GL_PROJECTION); //指定设置投影参数gluOrtho2D(-100.0,200.0,-100.0,150.0); //设置投影参数}void main(int argc,char*argv[]){glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); //初始化窗口的显示模式glutInitWindowSize(400,300); //设置窗口的尺寸glutInitWindowPosition(100,120); //设置窗口的位置glutCreateWindow("多边形的扫描转换与填充"); //设置一个名为多边形的扫描转换与填充的窗口glutDisplayFunc(Display); //设置当前窗口的显示调用函数Initial(); //完成窗口初始化glutMainLoop(); //启动主GLUT事件处理循环}运行结果。