计算机图形学教学资料 3.ppt

  1. 1、本文档共35页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
1 Chapter 3 Basic Raster Graphics Algorithms for Drawing 2D Primitives 基本二维图元的生成算法 2 Scan-conversion (扫描转换) : 确定图形对 应的象素集合及其颜色,用于显示一个图形的过程,也称 为图形的 光栅化 。 3 本章内容 (outline) ? 直线的扫描转换 ( SCAN CONVERTING LINES) ? 圆与椭圆的扫描转换 ( SCAN CONVERTING CIRCLE AND ELLIPSE) ? 区域填充 (FILLING REGION) ? 字符生成 (GENERATING CHARACTERS) ? 反走样 (ANTIALIASING) ? 二维裁剪 (2D CLIPPING) 4 图形扫描转换 (scan-conversion) ? Scan-conversion: 确定图形对应的象素集合及 其颜色,用于显示一个图形的过程,称为图形的 扫描转 换 或 光栅化 。 ? 图形扫描转换分为两步: 1 、确定有关(组成图形的)象素; 2 、用图形的颜色或其他属性对象素进行写操作。 第 2 步通常是通过调用设备驱动程序完成的,不属于 计算机图形学的研究范围。计算机图形学研究前者,即 如何确定 最佳逼近于 图形的象素集。 5 ? 问题 给定直线段的两个端点 P 0 (x0,y0) 和 P 1 (x1,y1) , 把其在光栅扫描显示器上显示出来 . ? 描述 理想的直线段 : 没有线宽 , 由无数个点构成 光栅扫描显示器上 : 有限个不重叠象素组成 SCAN CONVERTING LINES ( 直线的扫描转换 ) 6 p 0 p 1 ● ● ● ● ● ● 最佳表示 : 用最靠近理想直线的一些网格点(象素)来 代表直线(即确定最佳的 最近点 和 最大似点 的集合)。 直线的表示 直线的表示 (the representation of lines) 7 数值微分法( 1 ) (DDA---Digital Differential Analyzer) 记 : , 0 1 0 1 x x y y m ? ? ? 是 线 段 的 斜 率 , 则 线 段 方 程 为 : B mx y ? ? ) 0 1 1 0 0 1 ( x x y x y x B ? ? ? 中 其 。 1 : 1 ? ? ? i i x x 令 ? X 的变化大于 y 的变化 ? 方法: 1 0 ? ? m 假设 最简单方法: 利用直线方程直接计算象素集。但方法 用到了 浮点数的乘法 , 加法 和 取整 运算,影响效率。 8 数值微分法 (2) m B mx i ? ? ? B mx y i i ? ? ? ? 1 1 : 则 B x m i ? ? ? ) 1 ( m y i ? ? 9 令 y ir = round( y i ) 其中, round ()表示对 y i 进行四舍五入。 则所求点坐标为 ( x i+1 , round( y i+1 )) 其中 , x i+1 = x i +1, y i+1 = y i +m; 数值微分法 (3) 10 数值微分法 (4) ? 待解决问题 若 |m|>1, 则 x 向每变化 1 个单位 ,y 向有可 能超出 1 个步长。 ● ● ● ● ● p 1 p 0 解决方法 : 此时应令 y i 为自变量。 11 数值微分法 (5) ) , m ax( y x t ? ? ? ? ? 在算法中若能保证在一个方向上增量 为 1 ,在另一个方向的增量≤ 1 ,就能 保证产生最大似点集,从而克服前述问 题。 ? 最大步长 ( 步距 ) t ? ? 步进方向 : 的方向 12 数值微分法 (6) void Line ( /* Assumes -1<m<l,x0<x1 * / int x0, int y0, /* Left endpoint */ int x1, int y1, /* Right endpoint */ int value) /* Color value to place in line's pixels */ { int x; /* x runs from x0 to x1 in unit increments*/ double dy = y1 — y0: double dx = x1 - x0; double m = dy / dx; double y = y0; for (x = x0; x <= x1; x++) { Put

文档评论(0)

wq1987 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档