得鹿梦鱼 得鹿梦鱼

直线的扫描转化

对直线的扫描转换就是要在二维光栅格上计算接近或者位于理想的无限细的直线上的像素的坐标

为了可视化几何属性,SRGP将一个像素表达成一个圆形的点,并且其中心就是像素在整数栅格上颚的点x,y坐标

基本增量算法 DDA

具体实现细节请参考计算机图形学及实用编程技术下直线的生成算法_DDA

中点线算法 BresenHam

DDA算法很不错,但是由于它每一步都需要进行舍入操作,因此效率不高

具体实现细节请参考计算机图形学及实用编程技术下直线的生成算法BresenHam

并行划线算法

上述讨论过的线段生成算法顺序地确定像素位置,而利用并行计算机,则可以通过将计算分割到可用的多个处理器中来得到线段的像素位置,分割问题的一种解决方法是将现有的顺序算法放到多个处理器。

给定npn_p个处理器,我们可以通过把线段分割成npn_p个子线段,并在每个子段中同时生成线段而建立起并行的BresenHam画线算法

建立光栅系统并行算法的另一种方法是,为每个处理器分配一组屏幕坐标,只要有足够数量的处理器,就可以将每个处理器分配给某个区域屏幕的一个像素,这种方法可以通过为一个处理器分配线段范围之内的一个像素并计算像素距线段的距离而移植成线段显示的方法

帧缓存值的装载

实现线段和其他对象显示函数的最后一步工作时设定帧缓存的颜色值,由于扫描转换算法以连续的单位间隔生成像素位置,因此扫描转换算法可以使用增量方法在每一步高效的存取帧缓存

举一个特殊的例子:设定帧缓存矩阵式以行为主要顺序进行编址,并且像素位置从屏幕左下方0,0变换到右上方xmax,ymaxx_{max}, y_{max},对于二级系统,像素单位的帧缓存地址可以这样计算
addrx,y=addf0,0+yxmax+1+xaddrx,y = addf0,0 + yx_{max + 1} + x
沿扫描线移动,像素x+1,yx+1,y处的帧缓存地址可以根据位置x,yx,y的地址偏移进行计算

addx+1,y=addrx,y+1addx + 1, y = addrx,y + 1

那么x+1,y+1x + 1, y + 1的帧缓存地址的计算式为:

addx+1,y+1=addrx,y+xmax+2addx + 1, y + 1 = addrx,y + x_{max} + 2