[toc]

复习提纲

(谢谢同学们查看,我自己也没有想到😁,后面几张记录的不是很全,所以还需要自己查看老师所讲的

我做了相应的手写笔记,字迹有点丑,这是直接的下载地址:

https://minhaskamal.github.io/DownGit/#/home?url=https:%2F%2Fgithub.com%2FLeevan001%2FComputerGraphics_CQU%2Fblob%2Fmain%2F计算机图形学.pdf)

点击即可下载

github仓库

部分预览:

第一章

计算机图形学

计算机图形学是研究通过计算机将数据转换为图形,并在专门的显示设备上显示的原理、方法和技术的学科。

表示图形的方法

  • **点阵表示:**简称为图像(数字图像)——枚举出图形中所有的点。
  • **参数表示:**简称为图形——由图形的形状参数(方程或分析表达式的系数,线段的端点坐标等)+属性参数(颜色、线型等)来表示图形

§图形与图像

图像纯指计算机内以位图(Bitmap)形式存在的灰度信息。

图形含有几何属性,更强调场景的几何表示,是由场景的几何模型和景物的物理属性共同组成的。

–图形主要分为两类

  1. 基于线条信息表示(如工程图、等高线地图、曲面的线框图等)
  2. 明暗图(Shading)

§真实感图形实时绘制与自然景物仿真

–计算机中重现真实世界的场景叫做真实感绘制

–真实感绘制的主要任务是模拟真实物体的物理属性,简单的说就是物体的形状,光学性质,表面的纹理和粗糙程度,以及物体间的相对位置,遮挡关系等等

图形显示设备

–图形输出包括图形的显示和图形的绘制

–图形显示指的是在屏幕上输出图形

–图形绘制通常指把图形画在纸上,也称硬拷贝,打印机和绘图仪是两种最常用的硬拷贝设备

阴极射线管 (CRT)的显示原理

–组成

•电子枪

•聚焦系统

•加速系统

•磁偏转系统

工作原理

高速的电子束由电子枪发出,经过聚焦系统、加速系统和磁偏转系统就会到达荧光屏的特定位置。电子束轰击到荧光屏的不同部位,被其内表面的荧光物质吸收,发光产生可见的图形。

荧光物质受电子束一次轰击之后发光,亮度会迅速衰减,所以要保持显示一幅稳定的画面,必须不断地发射电子束(不断刷新)

电子枪由电灯丝,阴极和控制栅组成。电流通过灯丝产生热量,对阴极加热使其发射出电子束

聚焦系统是一个电透镜,能使众多的电子聚集于一点

加速阳极使电子达到轰击激发荧光屏应有的速度

偏转系统是使用静电场或磁场控制电子束产生偏转,最大偏转角是衡量系统性能的最重要的指标,显示器长短与此有关

(CRT显示器屏幕越大整个显象管就越长)

荧光屏是最终显示图形的部件
余辉时间:长余辉、短余辉

余辉时间:从屏幕发光到衰减其原亮度十分之一的时间。较短余辉时间的荧光层,需要较长时间的刷新频率来保持屏幕图形不闪烁。短余辉的荧光层用于动画,而长余辉荧光层则用于显示高复杂度的静态图形。对于图形监视器,通常采用余辉时间为10~60us的材料制成。

相关的概念:

刷新,像素,分辨率

–**刷新频率:**每秒钟重绘屏幕的次数。

刷新一次是指电子束从上到下扫描一次的过程

•刷新频率高到一定值后,图象才能稳定显示

•隔行扫描与逐行扫描

某种CRT产生稳定图像所需要的最小刷新频率

=1秒/荧光物质的持续发光时间

=1000/40ms=25Hz

只有刷新频率高到一定值后,图象才能稳定显示。大约达到每秒60帧即60Hz时,人眼才能感觉到屏幕不闪烁,要使人眼觉得舒服,一般必须有85Hz以上的刷新频率。

像素(Pixel:Picture Cell):构成屏幕(图像)的最小元素。
分辨率(Resolution):CRT在水平或竖直方向单位长度上能识别的最大像素个数,即水平和垂直方向上每厘米可绘制的点数单位通常为dpi(dots per inch)。在假定屏幕尺寸一定的情况下,也可用整个屏幕所能容纳的像素个数描述,如640480,800600,1024768, 12801024等等
分辨率主要取决于CRT所用的荧光物质的类型、聚焦系统和偏转系统。

彩色阴极射线管显示原理

§它是通过将能发不同颜色的光的荧光物质进行组合而产生彩色的。

§影孔板法:通常用于光栅扫描显示器,它能产生较射线穿透法范围广得多的颜色。

§原理:影孔板被安装在荧光屏的内表面,用于精确定位像素的位置

显示彩色的原理

彩色CRT显示器的荧光屏上涂有三种荧光物质,它们分别能发红、绿、蓝三种颜色的光。而电子枪也发出三束电子束来激发这三种物质,中间通过一个控制栅格来决定三束电子到达的位置

三束电子经过荫罩(影孔板)的选择,分别到达三个荧光点的位置。通过控制三个电子束的强弱就能控制屏幕上点的颜色

调节各电子枪发生的电子束中所含电子的数目,即可控制各色光点亮度。

如果每支电子枪发出的电子束的强度有256个等级,则显示器能同时显示256*256*256=16M种颜色,称为真彩系统

随机扫描显示器

随机扫描显示器中,电子束可以在任意方向上自由移动,按照显示命令用画线的方式绘出图形,因此也称矢量显示器。
特点:电子束随意移动,只扫描荧屏上要显示的部分。

– 应用程序输入并与图形软件一起存放在系统内存中。

– 应用程序的图形命令由图形软件包翻译成显示文件并存入刷新存储器

(显示缓存);

– 由显示处理器访问这个显示文件以刷新屏幕。

– 在每个刷新周期内,显示处理器遍历一次显示文件程序中的每条命令。

从刷新存储器里,读取显示文件当中的每一条指令,进行解释执行,然后按照图形轨迹生成最终的图形。

光栅扫描

扫描线(Scan Line)电子束先从荧光屏的左上角开始,向右扫描一条水平线
帧(Frame)一次扫描所产生的图像称为一帧
水平回扫期 (horizontal retrace) 电子束在扫描线之间的回扫期
垂直回扫期 (Vertical retrace) 在帧之间的回扫期

对光栅扫描显示器来说,当电子束扫描到该显示图形的点时,其强度发生变化,使该位置的亮度与背景亮度不同,这样便能够显示出要绘制的图形

电子束按固定的扫描顺序进行扫描N条扫描线,每条扫描线有M个像素,M * N显示器的分辨率。

光栅图形显示系统(Raster Graphics Systems)

显示处理器(Display Processor)其主要任务是将应用程序定义为一组像素强度值,存放在帧缓冲存储器(扫描转换),同时也能执行某些附加的操作几何变换、裁剪、纹理映射等等。

帧缓冲存储器(Frame Buffer):简称帧缓冲器,俗称显存,保存了对应屏幕所有点的亮度值。

视频控制器(Video Controller)建立帧缓存与屏幕像素之间的一一对应,负责刷新。
CRT

帧缓存中单元数目与显示器上像素的数目相同,单元与像素一一对应。各单元的数值决定了其对应像素的颜色。

显示颜色的种类与帧缓存中每个单元的位数有关(图示帧缓冲器的每个单元只有一位)。

帧缓存的大小和显示器分辨率之间的关系是:帧缓存的大小=显示器分辨率的大小*帧缓存的位平面数/8。

分辨率分别为640×480,1280×1024,和1024×1024的显示器各需要多少字节位平面数为24的帧缓存?
分辨率分别为640*480的显示器所需要的缓存的大小是:
640*480*24/8=921600字节;
分辨率为1280*1024的显示器所需要的缓存的大小是:
1280*1024*24/8=3932160字节;
分辨率为1024*1024的显示器所需要的缓存的大小是:
1024*1024*24/8= 3145728字节。

光栅显示系统的特点

优点:

  • 成本低
  • 易于绘制填充图形
  • 色彩丰富
  • 刷新频率一定,与图形的复杂程度无关
  • 易于修改图形

缺点:

  • 需要扫描转换
  • 会产生走样

习题

–ISO发布CGI、CGM、GKS、PHIGS

Suther land 被公认为开创交互式图形技术的奠基人,被称为 “计算机图形学之父”,并于 1988 年获 “图灵奖”。

计算机图形系统的硬件设备有哪些

显示处理器、输入设备、输出设备

常用的图形输入设备:
键盘、鼠标
此外还有
跟踪球、空间球、光笔、触摸板、 图形扫描仪、数字化仪、手写输入板、语音输入、数据手套

中央处理器:
中央处理器完成对图形的描述、建立、修改等各种计算,并对图形实现有效的存储。
许多外设所增加的固化的图形处理功能,可接受更高级的绘图命令,实现图形的缓冲,以及完成大部分图形函数的功能,从而大大减轻了CPU的负担。

图形输出设备:

图形显示设备和图形绘制设备
图形显示设备: 用于在屏幕上输出图形。基于阴极射线管的监视器、液晶显示器、等离子显示器
图形绘制设备: 用于把图形画在纸上,也称硬拷贝。打印机、绘图仪

光栅扫描显示器中,屏幕图形是依靠帧缓存进行刷新的,帧缓存里存放的是什么?

它是屏幕所显示画面的一个直接映象,又称为位映射图(Bit Map)或光栅。帧缓存的每一存储单元对应屏幕上的一个像素,整个帧缓存对应一帧图像。

简述随机扫描显示器和光栅扫描显示器的简单工作原理和各自的特点。

随机扫描 光栅扫描
1.具有高分辨率 1.分辨率低。
2.比较贵 2.价格便宜
3.如有需要, 任何修改都很容易 3, 修改很难
4.实心图案很难填充 4.实心图案容易填充
5.刷新率取决于或分辨率 5.刷新率不取决于图片。
6.仅显示可查看区域的屏幕。 6.扫描整个屏幕。
7.光束穿透技术是其基础。 7.阴影标记技术应运而生。
8.不使用隔行扫描方式。 8.它使用隔行扫描
9.仅限于线描应用 9.适合真实显示。

第二章 基本图形的生成算法

直线绘制算法

DDA算法

该算法简单,实现容易,但由于在循环中涉及实型数的运算,因此生成直线的速度较慢。

当x每递增1,y递增k,(即直线斜率);取象素点(x, round(y))作为当 前点的坐标。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//DDA算法:
DDALine(x0,y0,x1,y1,color)
int x0,y0,x1,y1,color;
{
int x
float dx,dy,k,y
dx=x1-x0; dy=y1-y0;
k=dy/dx;
y=y0;
for(x=x0;x<=x1;x++)
{
drawpixel(x,int(y+0.5),color);
y=y+k;
}
}

当|k| ≤1时,x每增加1,y最多增加1。
当 |k| >1时,必须把x,y地位互换

Bresenham算法

基本思想
过各行各列象素中心构造一组虚拟网格线。按直线从起点到终点的顺序计算直线与各垂直网格线的交点,然后根据误差项的符号确定该列象素中与此交点最近的象素。该算法的巧妙之处在于采用增量计算,使得对于每一列,只要检查一个误差项的符号,就可以确定该列的所求象素。

Bresenham线算法具有以下优点:
一种快速增量算法
仅使用整数计算

圆的生成

只要能画出八分之一的圆弧,就可以利用对称性的原理得到整个圆弧。

Mid-Point Circle Algorithm

1
2
3
4
5
6
7
8
9
10
11
12
13
14
MidPointCircle(int r int color)
{
int x,y;
float d;
x=0; y=r; d=1.25-r;
circlepoints (x,y,color); //显示圆弧上的八个对称点
while(x<=y)
{
if(d<0) d+=2*x+3;
else { d+=2*(x-y)+5; y--;}
x++;
circlepoints (x,y,color);
}
}

为了进一步提高算法的效率,可以将上面的算法中的浮点数改写成整数,将乘法运算改成加法运算,即仅用整数实现中点画圆法。
初始化运算使用e=d-0.25代替d,对应于
e=1-R

生成圆弧的Bresenham法

以点(0,R)为起点按顺时
针方向生成圆,则在第一象
限内y是x的单调递减函数。

假设圆心和起点均精确地落在
像素中心上。如果已经知道圆
弧上的一点(xi,yi),下一像素
的选取有三种可能:
正右方像素H
右下角像素D
正下方像素V

椭圆的生成

中点画法

根据d1的符号来决定下一像素是取正右方的那个,还是右上方的那个。

若d1<0,中点在椭圆内,取正右方象素,判别式更新为:
d1’=F(Xp+2,Yp-0.5)=d1+b2(2Xp+3)
d1的增量为b2(2Xp+3)
当d1≥0,中点在椭圆外,取右下方象素,更新判别式:
d1’=F(Xp+2,Yp-1.5)=d1+b2(2Xp+3)+a2(-2Yp+2)
d1的增量为b2(2Xp+3)+a2(-2Yp+2)

判别式的初始值

注意:
1)上半部分的终止判别 2)下半部分误差项的初值
算法步骤:
1.输入椭圆的长半轴a和短半轴b。
2.计算初始值d=b2+a2(-b+0.25)、x=0、y=b。
3.绘制点(x,y)及其在四分象限上的另外三个对称点。
4.判断d的符号。若d≤0,则先将d更新为d+b2(2x+3),再将(x,y)更新为(x+1,y);否则先将d更新为d+b2(2x+3)+a2(-2y+2),再将(x,y)更新为(x+1,y-1)。
5.当b2(x+1)<a2(y-0.5)时,重复步骤3和4。否则转到步骤6。
6.用上半部分计算的最后点(x,y)来计算下半部分中d的初值:

多边形的扫描转换

多边形 :由一系列首尾相连的直线段构成的图形称为多边形。

多边形分为凸多边形、凹多边形、含内环的多边形。
凸多边形是指任意两顶点间的连线均在多边形内;
凹多边形是指任意两顶点间的连线有不在多边形内的部分;
含内环的多边形则是指多边形内再套有多边形,多边形内的多边形也叫 内环,内环之间不能相交。

多边形有两种重要的表示方法顶点表示点阵表示。
顶点表示是用多边形的顶点序列来表示多边形。

这种表示直观、几何意义强、占内存少,易于进行几何变换,被广泛用于各种几何造型系统中;
点阵表示是用位于多边形内的象素集合来刻画多边形。
这种表示丢失了许多几何信息(如边界、顶点),但它是光栅显示图形所需要的表示形式。

多边形的扫描转换: 把多边形的顶点表示转换为点阵表示。

多边形的扫描转换算法

非自交多边形 (边与边之间除了顶点外无其它交点)

基本思想:
按扫描线顺序,计算扫描线与多边形的相交区间,再用要求的颜色显示这些区间的象素,即完成填充工作。
对于一条扫描线填充过程可以分为四个步骤:
求交:计算扫描线与多边形各边的交点;
排序:把所有交点按x值递增顺序排序;
配对:第一个与第二个,第三个与第四个等等;每对交点代表扫描线与多边形的一个相交区间,
着色:把相交区间内的象素置成多边形颜色,把相交区间外的象素置成背景色。

区域填充

将指定的颜色从种子点扩展到整个区域的过程
区域填充算法要求区域是连通的

连通性
4连通、8连通

为减少像素重复入栈,限定任一扫描线与多边形相交区间,
只取一个种子像素

走样

把由离散量表示连续量引起的失真称为走样;
把减少或克服走样效果的技术称为反走样技术,简称反走样。

光栅图形的走样有如下几种:
a) 产生阶梯或锯齿形;b) 狭小图形遗失;细节失真c) 实时动画忽隐忽现、闪烁跳跃。

常用的反走样的主要方法

1)提高分辨率方法
2)非加权区域采样
3)加权区域采样

第三章 二维图形的裁剪

Cohen-Sutherland

设线段的两个端点为P1(x1,y1)和P2(x2,y2),

根据上述规则,可以求出P1和P2所在区域的分区代码C1和C2。

根据C1和C2的具体值,可以有三种情况:
(1)C1=C2=0,表明两端点全在窗口内,因而整个线段也在窗内,应予保留。
(2)C1&C2≠0(两端点代码按位作逻辑乘不为0),即C1和C2至少有某一位同时
为1,表明两端点必定处于某一边界的同一外侧,因而整个线段全在窗外,
应予舍弃。
(3)不属于上面两种情况,均需要求交点。

求交计算公式:

y=y1+m(xboundaryx1)x=x1+(yboundaryy1)/mm=(y2y1)/(x2x1)y=y_1+m(x_{boundary}-x_1)\\ x=x_1+(y_{boundary}-y_1)/m\\ m=(y_2-y_1)/(x_2-x_1)

中点分割法

中点分割算法特点:


裁剪的实质、就是决定图形中那些点、线段、文字、以及多边形在窗口之内。

梁友栋-Barskey剪裁算法

参考网址:https://blog.csdn.net/Hachi_Lin/article/details/88776784

Weiler-Athenton

算法步骤

  1. 建顶点表;
  2. 求交点;
  3. 裁剪

1、顺时针输入被裁剪多边形顶点序列Ⅰ放入数组1中。
2、顺时针输入裁剪窗口顶点序列Ⅱ放入数组2中。
3、求出被裁剪多边形和裁剪窗口相交的所有交点,并给每个交点
打上 “入”、“出”标记
  然后将交点按顺序插入序列Ⅰ得到新的顶点序列Ⅲ,并放入数组3中;
同样也将交点按顺序插入序列Ⅱ得到新的顶点序列Ⅳ,放入数组4中;
4、初始化输出数组Q,令数组Q为空。接着从数组3中寻找“入”点。
    如果“入”点没找到,程序结束。
5、如果找到“入”点,则将“入”点放入S中暂存。
6、将“入”点录入到输出数组Q中。并从数组3中将该“入”点的“入”点标记删去。

7、沿数组3顺序取顶点:

如果顶点不是“出点”,则将顶点录入到输出数组Q中,流程转第7步。
否则,流程转第8步。

8、沿数组4顺序取顶点:

如果顶点不是“入点”,则将顶点录入到输出数组Q中,流程转第8步。
否则,流程转第9步。

9、如果顶点不等于起始点S,流程转第6步,继续跟踪数组3。

否则,将数组Q输出;

流程转第4步,寻找可能存在的分裂多边形。

算法在第4步:满足“入”点没找到的条件时,算法结束。

消隐

Z缓冲器算法(z-Buffer Algorithm)

帧缓冲器 – 保存各像素颜色值
z缓冲器 --保存各像素处物体深度值
z缓冲器中的单元与帧缓冲器中的单元一一对应

思路:
先将z缓冲器中个单元的初始值置为-1(规范视见体的最小n值)。
当要改变某个像素的颜色值时,首先检查当前多边形的深度值是否大于该像素
原来的深度值(保存在该像素所对应的Z缓冲器的单元中);

  1. 如果大于,说明当前多边形更靠近观察点,用它的颜色替换像素原来的颜色;
  1. 否则说明在当前像素处,当前多边形被前面所绘制的多边形遮挡了,是不
    可见的,像素的颜色值不改变。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
算法描述:
for ( v= 0;v<vmax;v++)
for (u= 0; u<umax; u++)
{
将帧缓冲器的第(u,v)单元置为背景色;
将Z缓冲器的第(u,v)单元置为-1(可见的最小深度值) }
for (每个多边形)
{
求出多边形在投影平面上的投影与当前扫描线的相交区间;
for (多边形在投影平面上的投影区域内的每个像素(u,v) )
{ 计算多边形在当前像素(u,v)处的深度值d; }
if (d > Z缓冲器的第(u,v)单元的值)
{ 置帧缓冲器的第(u,v)单元值为当前多边形颜色;
置Z缓冲器的第(u,v)单元值为d; }
}

优点:
简单,特别适合于用硬件实现。
易处理任意复杂的画面(空间多边形的相贯与交叉重叠等)、隐藏面以及显示复杂曲面之间的交线。
由于显示器的图像空间大小是固定不变的,故该算法的计算量最多随画面的复杂性呈线性增长。
由于画面元素(多边形等)可按任意次序写入帧缓存器和 Z向深度缓存器,故无需按深度优先级排序各有界表面,因此该算法可节省深度的排序时间。
缺点:
占用大量的存储单元来保存每一点的深度数据。
它在处理斜直线的阶梯效应、透明与半透明效果等问题时存在较大的困难。

需要计算的像素深度值次数
=多边形个数*多边形平均占据的像素个数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
扫描线Z缓冲器消隐算法
{ for(v=0; v < vmax; v++) //初始化
{ for(u=0; u<umax; u++)
{ 置Z缓冲器的第u个单元的深度值为-1(最小的深度值);
置帧缓冲器的第(u,v)单元的颜色值为背景色;
}
for(每一个多边形)
{ 求出多边形在投影平面上的投影与当前扫描线的相交区间;
for(该区间内的每一个像素)
{ 计算多边形在当前像素处的深度值,记为d;
if(d>Z缓冲器的第(u,v)单元的值)
{ 置Z缓冲器的第(u,v)单元的深度值为d;
置帧缓冲器的第u个单元的颜色值为当前多边形颜色值;
}
}
}
}