计算机图形学电子教案c3-1
(117页)
本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!
19.90 积分
本章的主要内容 图形光栅化 光栅化图形的处理确定最佳逼近的象素集合 1、区域填充。2、线宽和线及其颜色,进而在光栅图 型。3、字符。4、图形的裁形显示器上显示一个图形 剪。5、图形的反走样。对的过程。 一个图形进行光栅化处理时 所出现的走样现象进行处理。 安徽师范大学数学计算机科学学院 计算机图形学直线(段)的光栅化 区域填充 安徽师范大学数学计算机科学学院 计算机图形学具有一定宽度的直线 图案填充 安徽师范大学数学计算机科学学院 计算机图形学 1 1 1 1 1 1 0 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 1 1 1 0 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0点阵字符 点阵字库中的位图表示 安徽师范大学数学计算机科学学院 计算机图形学 二维图形的裁剪安徽师范大学数学计算机科学学院 计算机图形学 反走样前的直线段 反走样后的效果安徽师范大学数学计算机科学学院 计算机图形学? 直线的扫描转换: 确定最佳逼近于该直线的一 组象素,并且按扫描线顺序,对这些象素进行 写操作。? 三个常用算法: 数值微分法(DDA) 中点画线法 Bresenham算法 安徽师范大学数学计算机科学学院 计算机图形学 1 数值微分(DDA)法 Digital Differential Analyzer? 基本思想 已知过端点 P 0 ( x 0 , y 0 ) , P 1 ( x 1 , y 1 ) 的直线段L:y ? kx ? b 直线斜率为 y ? y k ? 1 0 x 1 ? x 0 从 x 的左端点 x 0 开始,向 x 右端点前进。步长=1(个象素),计算相应的y坐标 y ? k x ? b ;取象素点(x, round(y))作为当前点的坐标(?k? ≤1时)。 安徽师范大学数学计算机科学学院 计算机图形学 这种方法非常直观、容易理解,但是效率较低。这是因为每步运算中都有一个浮点乘法与一个舍入运算。 作为最底层的光栅图形算法,在通常的CAD/图形系统中,会被大量应用,因此,哪怕节约一个加法或减法,也是很了不起的改进。 由此出发点,导致增量算法的思想。 首先考虑?k? ≤1的情形。 安徽师范大学数学计算机科学学院 计算机图形学考虑到 yi?1 ? kxi?1 ? b ? k(xi ?1) ? b ? yi ? k即:当x每递增1,y递增k(即直线斜率); 安徽师范大学数学计算机科学学院 计算机图形学例:画直线段x floor(y+0.5) y Line: P0(0, 0)-- P1(5, 2)0 0 0 31 0 0.42 1 0.8 23 1 1.2 14 2 1.65 2 2.0 0 1 2 3 4 5注:网格点表示象素中心 K=0.4void DDALine(int x0,int y0,int x1,int y1,int color) ? int x; float dx, dy, y, k; dx = x1-x0, dy=y1-y0; k=dy/dx; for (x=x0, y=y0; x?x1;x++) ? putpixel (x, floor(y+0.5), color); y=y+k; ? ?? 注意上述分析的算法仅适用于?k? ≤1的情形。 当 ?k? ?1时,会如何?(答案见下页) Line: P0(0, 0)-- P1(2, 5) 5 4 3 2 1 0 1 2 3 4 5 ?k? >1 示意图 安徽师范大学数学计算机科学学院 计算机图形学 yi?1 ? kxi?1 ? b 1 x ? ? (y ? ?b) i 1 k i 1 1 1 ? (y ?1?b) ? x ? k i i k 即:当y每递增1,x递增1/k. 安徽师范大学数学计算机科学学院 计算机图形学void ddaline(int x0,int y0,int x1,int y1,int color) ? int x; float dx, dy, y, k; dx = x1-x0, dy=y1-y0; k=dy/dx, x=x0; for (y=y0; y?y1; y++) ? putpixel (floor(x+0.5), y, color); x=x+1/k; ? ? 安徽师范大学数学计算机科学学院 计算机图形学void ddaline(int x0,int y0,int x1,int y1,int color) {int i;float dx, dy, length,x,y;if (fabs(x1-x0)>=fabs(y1-y0)) length=fabs(x1-x0); DDA算法与基本算法相比,减少了else 浮点乘法,提高了效率。但是x与 length=fabs(y1-y0); dx、y与dy用浮点数表示,每一步dx = (x1-x0)/length; 要进行四舍五入后取整,不利于硬dy=(y1-y0)/length; 件实现,因而效率仍有待提高。 i=1;x= x0;y= y0;while(i<=length){putpixel (floor(x+0.5), floor(y+0.5), color); x=x+dx; y=y+dy; i++; }}如图3-3所示,对于直线斜率k在0~1之间的情况,从给定线段的左端点P0(x0, y0)开始,逐步处理每个后续列(x位置),并在扫描线y值最接近线段的像素上绘出一点。 假设当前直线上的像素坐标 p2 yi+1 为p(xi, yi),那么下一步需 d2 y 要在列xi+1上确定扫描线y 的值。 值要么不变,要么 d1 y p p1 yi 递增1,可通过比较d1和d2来 决定。 xi xi+1 根据误差项d的值 关 键 词: 计算机图形学电子教案c3-1 ppt、pptx格式 免费阅读 下载 天天文库
天天文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。