2D基元绘图

基元也称为图元,是绘图时的最小基本单位

直线和圆的光栅化

光栅化(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

猜你喜欢

转载自blog.csdn.net/fegnkuang/article/details/45441241