第3章 二维线图元的生成.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第3章 二维线图元的生成

第3章 二维线画图元的生成 本章目标 如何绘制简单线画图元(点、线、圆等) 使用OpenGL的相关函数 主要内容 3.1 二维图形显示 3.2 扫描转换直线段 3.3 扫描转换圆弧 3.4 线画图元的属性 3.5 OpenGL相关函数 3.1 二维图形显示 图元的生成 是指完成图元的参数表示形式到点阵表示形式的转换。通常也称扫描转换图元(Scan Converter) 参数表示形式由图形软件包的使用者指定 点阵表示形式是光栅显示系统刷新时所需的表示形式 3.1 二维图形显示 像素操作函数(画像素和读像素) 最基本的绘图函数 画(写)像素: SetPixel ( int x, int y, int color ) 读像素: int GetPixel ( int x, int y) 注意:具体的语言环境使用的函数名可能不同,这里的函数名仅用于课堂教学 3.1 二维图形显示 用OpenGL实现读/写像素函数 3.2 扫描转换直线段 扫描转换直线 求与直线段充分接近的像素集,并以此像素集替代原连续直线段在屏幕上显示 约束 像素间均匀网格 整型坐标系 几点假设 直线段为: 直线段的宽度为1 直线段的斜率 3.2.1 直线方程法 基本思想 根据直线的几何方程确定线段路径上的像素位置 直线方程 M 表示斜率,b 表示 y 轴截距 方法 划分区间[x0, x1]: k0, k1,…, kn, ki+1=xi+1, 其中k0 = x0, kn= x1 计算纵坐标y:yi = mki + b 取整: 3.2.2 DDA算法 数字差分分析法DDA (Digital Differential Analyzer) 方法 程序:p45 主要运算 加法+取整 浮点运算 3.2.2 DDA算法 以下代码是否正确 void LineDDA(int x0,int y0,int x1,int y1,int color) { int x, dx, dy, y; float m; dx = x1 - x0; dy = y1 - y0; m = dy / dx; y = y0; for(x = x0; x = x1; x++) { y = (int)(y + 0.5); SetPixel(x, y, color); y += m; } } 3.2.3 中点算法 3.2.3 中点算法 问题:如何判断距直线最近的下一个像素点? 根据可能所取点间的中点在直线的位置 构造判别式:d = F(M) = F(xp+1, yp+0.5) 由 d 的正和负可判定下一个像素。其中(xp , yp)为当前点坐标: d 0,取NE;否则取E 3.2.3 中点算法 判定再下一个像素 1)若d≥0,取正右方像素E,则判定下一个像素,得: d1 = F(xp+2, yp+0.5) = a(xp+2) + b(yp+0.5) + c = d + a, d的增量是a(即-?y) 2)若d<0,取右上方像素NE,则判定下一个像素,得: d2 = F(xp+2, yp+1.5) = d + a+b , d的增量为a+b (即-(?y-?x)) 3.2.3 中点算法 增量d的初始值 d0=F(x0+1, y0+0.5)=F(x0, y0)+a+0.5b 因(x0, y0)在直线上,F(x0, y0)=0, 所以,d0 = a + 0.5b 增量d的递推公式 优化: 增量都是整数,只有初始值包含小数,可以用2d代替d, 2a改写成a + a 特点:算法中只有整数变量,不含乘除法,可用硬件实现 3.2.3 中点算法 递推公式 程序 3.2.3 中点算法 3.2.3 中点算法 其它几种情况 3.2.3 中点算法 3.3 扫描转换圆弧 处理对象:圆心在原点的圆弧 其它情况如何考虑? 平移到原点,扫描转换后再平移到原位置 圆的八对称性 只需要扫描转换八 分之一圆弧即可 3.3 扫描转换圆弧 两种直接计算方法 离散点 离散角度 缺点:开平方,三角函数运算,计算量大,不可取 3.3.1 圆弧的中点算法 圆弧的正负划分性 3.3.1 圆弧的中点算法 第二个八分圆 特点: 第一象限的八分之一圆弧中x 的变化大于y的变化, 即圆弧上的切矢量斜率在0 ... -1间 3.3.1 圆弧的中点算法 问题:如何判断距圆弧最近的下一个像素点? 隐函数 F(x , y) = x2 + y2 - R2 = 0

文档评论(0)

jixujianchi + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档