计算机图形学线宽和线型处理.ppt_第1页
计算机图形学线宽和线型处理.ppt_第2页
计算机图形学线宽和线型处理.ppt_第3页
计算机图形学线宽和线型处理.ppt_第4页
计算机图形学线宽和线型处理.ppt_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第五讲 线宽和线型处理,1. 直线线宽的处理 (1)线刷子 生成具有一定宽度的直线,可以沿着生成直线时获得的像素点,通过移动一把具有 一定宽度的“线刷子”来实现。,假设直线斜率在-1,1之间,可把线刷子定成垂直方向,并将线刷子中心点对准直线上某一像素点,然后将线刷子沿直线运动就刷出了一条具有一定宽度的直线。 当直线斜率不在-1,1之间时,只需把线刷子运动方向改为水平方向即可。,LineBrush (int x,int y,int color) Drawpixel(x,y,color); Drawpixel(x+1,y,color); Drawpixel(x-1,y,color); Drawpi

2、xel(x+2,y,color); Drawpixel(x-2,y,color); Drawpixel(x-3,y,color); Drawpixel(x+3,y,color); ,水平线刷子的实现,线刷子的特点: 实现简单、效率高。 斜线与水平(或垂直)线粗细不均匀。 当线宽为偶数个象素时,线的中心将偏移半个象素。 利用线刷子生成线的始末端总是水平或垂直的,看起来不太自然,在两条直线的连接处会产生缺口; 解决:添加“线帽(line cap)”,当比较接近水平的线与比较接近垂直的线汇合时,汇合处外角将有缺口。,线刷子产生的缺口,(a)斜角连接,(b)圆连接,(c)斜切连接,解决:,斜角连接(m

3、iter join) 圆连接(round join) 斜切连接(bevel join),(2)正方形刷子 把边宽为指定线宽的正方形的中心沿直线平行移动,即可获得具有线宽的线条。 实现正方形刷子最简单的办法是:把正方形中心对准单象素宽的线条上各个元素,并把正方形内的象素全部置成线条颜色。这种简单方法将重复地写象素。这是因为相邻两象素的方形一般会重叠。,方刷子的特点: 简单,容易实现。 效率低。 线的末端总是水平或垂直的; 在两条直线的连接处会产生缺口; 宽度不均匀; 宽度为偶数时无法实现。 方刷子绘制的线条自然地带有一个“方线帽”,SquarBrush (int x,int y,int colo

4、r) Drawpixel(x,y,color); Drawpixel(x+1,y,color); Drawpixel(x-1,y,color); Drawpixel(x+1,y+1,color); Drawpixel(x-1,y+1,color); Drawpixel(x+1,y-1,color); Drawpixel(x-1,y-1,color); Drawpixel(x,y-1,color); Drawpixel(x,y+1,color); ,方刷子的实现,为了避免重复写象素,可以采用与活性边表类似的技术,为每条扫描线建一个表,存放该扫描线与线条的相交区间左右端点位置,在每个象素使用正方形

5、刷子时,用该方形与扫描线的相交区间端点坐标去更新原表内端点数据。,3. 其它线宽处理方式 区域填充 改变刷子形状:,2. 圆弧线宽的处理,为生成具有一定宽度的圆弧,可考虑与生成具有一定宽度的直线类似的方法,即用“刷子”来刷出具有宽度的圆弧。,采用线刷子生成具有一定宽度的圆弧时,在小于45度的弧时用水平刷子,在大于45度的弧时用垂直刷子,即在经过曲线斜率为正负1的点时刷子的方向要改变。因此刷出的圆弧在接近水平或垂直方向的部分线条会粗一些,而在斜率接近正负1点附近则细一些。,而当采用正方形刷子时无需改变刷子的方向,只需沿着圆弧像素,把刷子中心对准圆弧移动刷子即可,这样刷出来的直线在接近水平或垂直方

6、向时最细,而且斜率为正负1时最粗。 此外,还可以采用填充的方式,即先绘制出圆弧的内、外边界,然后在内外边界之间进行填色。,3线型的处理,有时需绘制特殊线型的线条,如虚线、点划线等,以便区分各种不同的意义。如采用实线表示立体线框中可见的轮廓线,用虚线表示不可见的轮廓线,用点划线表示中心线等。,线型可用一个布尔值的数组来存放。例如,用一个18位整数可以存放18个布尔值,用这样的整数存放线型定义时,线型必须以18个象素为周期进行重复。,将写像素语句 DrawPixel(x,y,color) 更改为: if (位串i%18) DrawPixel(x,y,color) 其中i为循环变量,每处理一个象素递增1。,缺点: 采用固定划线长度的实现方法会在不同直线方向上产生出不等长的划线段。原因在于相同个数的象素沿不同方向将生成不同长度的线段。,解决方法: 为实现精确的线型定义,应按照直线的斜率调整线型定义数组中实线段和空白段的象素数目。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论