光栅扫描系统
交互式光栅图形系统通常使用几个处理部件。除了中央处理器(CPU)以外,还使用一个视频控制器(video controller)或显示控制器(display controller)来控制显示设备的操作。简单光栅系统的组织结构如图2.24所示。其中,帧缓存可以在系统存储器的任意位置,视频控制器通过访问帧缓存来刷新屏幕。更高级的光栅系统除了使用视频控制器之外,还使用其他处理器作为协处理器和加速器来完成各种图形操作。
视频控制器
图2.25给出了常用的光栅系统组织。帧缓存使用系统存储器的固定区域,并且由视频控制器直接访问
帧缓存的位置以及相应的屏幕位置均使用笛卡儿(Cartesian)坐标。应用程序使用图形软件包的命令来设定显示对象相对于笛卡儿坐标系原点的坐标位置。尽管在特定系统中我们可以将原点设定在任一方便的位置,但多数情况下将坐标原点定义在屏幕的左下角。图2.26给出了一个原点在屏幕左下角的二维笛卡儿参考系统。屏幕表面则表示二维系统的第一象限,正x的值向右递增,正y的位从下到上递增。像素位置用整数x从屏幕左边的0到右边的x(max)和整数Y从底部的0到顶部的y(max)来赋值。但在屏幕刷新等硬件处理以及某些软件系统中,像素位置以屏幕左上角为参考。
图2.77给出了视频控制器的基本刷新操作流程。有两个寄存器用来存放屏幕像素的坐标。开始时,为顶部扫描行将x寄存器置为0、将Y寄存器置为y(max)。存储在帧缓存中该像素对应位置的值被取出,并用来设置CRT电子束的强度值。然后,x寄存器增加1,且该过程对顶部扫描线上的下个像素重复执行,并沿该扫描线对每个像素重复执行。在处理完顶部扫描线的最后一个像素之后,x寄存器复位为O,y寄存器减1,指向顶部扫描行的下一行。然后,依次处理沿该扫描线的各像素,且该过程对每条后继的扫描线重复执行。当循环处理完底部扫描线的所有像素后,视频控制器将寄存器复位为最高行扫描线上第一个像素的位置,刷新过程重复开始。
因为屏幕必须按每秒最少60帧的频率刷新,所以图2.27所示的简单过程不能使用循环周期太慢的RAM芯片。为了加速像素处理,视频控制器每次从刷新缓存中取出多个像素值。这些像素强度则存放在单独的寄存器中,用来为一组相邻的像素控制CRT电子束的强度。当处理完该组像素后,从帧缓存取出下一块像素值。
视频控制器还能执行一些其他操作。对于多类应用,视频控制器在不同的刷新周期内可以从不同的存储区中取出像素强度值。例如,在高性能系统中,常常提供两个帧缓存,一个缓存用来刷新,另一个以强度值填充。然后,这两个缓存可以互换角色。这种方法提供了生成实时动画的快速机构,因为正在移动的对象的不同视图可以逐一装入刷新缓存中而不用中断刷新周期。同样,视频控制器可以完成像素块的变换。在一个刷新周期内,屏幕区域可以放大、缩小,或从一个位置移向另一个位置。此外,视频控制器常常包含一个查找表,帧缓存中的像素值用来访问查找表,而不是直接控制CRT电子束强度。这提供了改变屏幕强度值的快速方法,将在以后更详细地讨查找表。最后,可以将某些系统设计成允许视频控制器将来自电视摄像机或其他输入设备的输入图像与帧缓存图像进行混合。
光栅扫描显示处理器
图2.28给出了建立光栅系统的一种方法,其中包含独立的显示处理器(display processor)有时也指图形控制器(graphics controller)或显示协处理器(display coprocessor)。显示处理器的用途是使CPU从图形的复杂处理中解脱出来。除了系统存储器以外,还可以提供独立的显示处理器的存储区域。
显示处理器的主要任务是将应用程序给出的图形定义数字化为一组像素强度值,并存放在帧缓存中。这个数字化过程称为扫描转换(scan conversion )。扫描转换将给定直线和其他几何对象的图形命令转换为一组与屏幕像素位置对应的离散点。例如,直线段的扫描转换意味着必须确定最接近于直线段路径的像素位置,并把每个位置的强度值存入帧缓存。图形定义中其他对象的扫描转换也使用类似的方法。字符可以用如图2.29所示的矩形像素点阵进行定义,或者用如图2.30所示的曲线轮廓来定义。字符网格矩阵的大小可以为5x7到9
x12,对于高质量显示则还要大一些。字符的点阵显示是把矩形点阵模式附加到帧缓存中指定的坐标位置。对于使用曲线轮廓定义的字符,通过确定最接近轮廓的像素位置将字符形状扫描转换到帧缓存中。
显示处理器也能执行某些附加的操作。这些功能包括生成各种线型(虚线、点线或实线)、显示彩色区域以及对显示对象执行某些变换和管理。显示处理器一般都有与鼠标等输入设备的接口。
为了减少光栅系统中对存储量的需求,使用了将帧缓存组织成链表且对强度信息进行编码的方法。一种实现方法是将每行扫描线作为一组整数对来存储,每对中的一个整数指示强度值,另一个整数设定该扫描线上具有此强度的相邻像素数。这种技术称为行程长度编码(run-length encoding )如果图形几乎都是由每个单色的长行程构成的,则可以大量节省存储空间。当像素强度变化为线性时,也能采用类似的方法。另一种方法是将光栅按一块块矩形区域编码(单元编码,cell
encoding )。行程编码的缺点是强度的改变难以记录,而当行程长度减小时,存储量开销急剧增加。此外,当包括许多短行程时,显示控制器处理光栅是困难的。由于存储器成本的急剧下降,帧缓存的大小已不再是主要的考虑因素。然而,编码方法可用于数字存储器和图像信息的传递中。