基元也称为图元,是绘图时的最小基本单位
直线和圆的光栅化
光栅化(rasterization):
光栅化也称为扫描转换(scan conversion);
是从向量图到像素矩阵的转换。
确定哪些像素在由顶点表示的图元内部
生成片段集合
片段有位置值(像素位置)和由顶点属性值插值得到的颜色、纹理坐标和深度等其他属性
直线的光栅化
介绍以下这两种算法:基础算法,中点法
1.基础算法
平凡算法(无增量版本 )
y = m.x+p
x: 1->n
显示(x,round(m.x+p))
DDA(增量版本)
y = m.x + p
x[i+1] = x[i] + dx
y[i+1] = y[i] + m.dx
对于这两种基础算法来说,如果斜率m>1的话,就要交换x和y的角色
2.中点法
又称作Bresenham算法,无需近似.适用于斜率在0-1,对于大于1的,交换x和y的角色,对于斜率为负的,采用对称法描图
决策函数:F(Mi)=ax - by + c
已知上一个点的坐标,把中点代入
F>0,采用NE
F<0,采用SE
F=0,默认采用SE
圆的光栅化
中点法
原理:我们只描述x在[0,R/sqrt(2)],其余的点由对称性获得
算法
隐式方程:F(x,y)=x² + y² -R²
决策函数:F(M)=(x[p]+1,y[p]-0,5)
如果F<0,选E,否则,选SE
F(Mi+1)=F(Mi)+2x[p]+1(选择E)
F(Mi+1)=F(Mi)+2x[p]-2y[p]+2
椭圆的光栅化
中点法
描绘区间:[0,a]
其他点通过对称性获得
隐式方程:F()=b²x²+a²y²-a²b²=0
当切线斜率大于-1的时候选择E或者SE
当切线斜率小于-1的时候选择S或者SE