网站大量收购独家精品文档,联系QQ:2885784924

计算机图形学第二章浅析.ppt

  1. 1、本文档共110页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第二章 直线扫描转换算法;2.1 光栅图形学;计算机上常见的显示器为光栅图形显示器,光栅图形显示器可以看作像素的矩阵。像素是组成图形的基本元素,一般称为“点”。通过点亮一些像素,灭掉另一些像素,即在屏幕上产生图形。在光栅显示器上显示任何一种图形必须在显示器的相 应像素点上画上所需颜色,即具有一种或多种颜色的像素集合构成图形。确定最佳接近图形的像素集合,并用指定属性写像素的过程称为图形的扫描转换或光栅化。对于一维图形,在不考虑线宽时,用一个像素宽的直、曲线来显示图形。二维图形的光栅化必须确定区域对应的像素集,并用指定的属性或图案进行显示,即区域 填充。;什么是光栅图形学? 光栅显示器 - 图形光栅化、 光栅化图形的处理;光栅显示器上显示的图形,称之为光栅图形。光栅显示器可以看作是一个象素矩阵,在光栅显示器上显示的任何一个图形,实际上都是一些具有一种或多种颜色和灰度象素的集合。由于对一个具体的光栅显示器来说,象素个数是有限的,象素的颜色和灰度等级也是有限的,象素是有大小的,所以光栅图形只是近似的实际图形。如何使光栅图形最完美地逼近实际图形,便是光栅图形学要研究的内容。以后,我们提到“显示器”时,如未特别声明,均指光栅显示器。 ;光栅图形学算法特点;光栅图形学的研究内容;直线段是最基本的图形,因此直线段生成的质量好坏与速度快慢将直接影响整个图形生成的质量和速度。所以直线段生成算法在图形软件设计中起着关键的作用。 如果已知屏幕中直线段的二个端点,可以有多种不同的数学方法来决定应改变在二端点之间的哪些像素的亮度值才能显示出二点间的直线,生成直线段的算法之间区别主要是判别和生成x,y增量过程和方法不同,所能适应的设备环境也不同。下面介绍三种基本的画线算法。;光栅图形中点的表示;光栅图形中点的表示;在光栅显示器的荧光屏上生成一个对象,实质上是往帧缓存寄存器的相应单元中填入数据。画一条从(x1, y1)到 (x2, y2)的直线,实质上是一个发现最佳逼近直线的象素序列,并填入色彩数据的过程。这个过程也称为直线光栅化。 ;直线扫描转换的本质;图形显示前需要:扫描转换+裁剪 裁剪---〉扫描转换:最常用,节约计算时间。 扫描转换---〉裁剪:算法简单;;2.2 逐点画线算法;逐点画线算法(1/19);逐点画线算法(2/19);逐点画线算法(3/19);逐点画线算法(4/19);逐点画线算法(5/19);逐点画线算法(6/19);逐点画线算法(7/19);逐点画线算法(8/19);逐点画线算法(9/19);逐点画线算法(10/19);逐点画线算法(11/19);逐点画线算法(12/19);逐点画线算法(13/19);逐点画线算法(14/19);逐点画线算法(15/19);逐点画线算法(16/19);逐点画线算法(17/19);注意:从一个理论上的算法提炼到具体一个编译器可以运行编译的程序,可能会有多种不同的编写程序方法,但执行效果是一样的,都能体现算法的精髓。 上面的逐点画线算法没有实现计算误差中 F(K)的递推工作,效率可能会低点,同学们可以考虑把这个可执行无误算法改进一下。 优秀的程序不仅要求无误执行,还要有良好的性能,茁壮性(出错处理好)等要求。; 上面这个程序还有些bug,那就是不能绘制水平或竖直的直线,还有未能实现F(k)的递推工作,这些留给同学们去做,可以在程序中加入一些代码来解决这个问题。同学们还可以根据自己对算法的理解重新编写代码,不用和我编写的思路一样。比如实现四象限方向画图,判断F(k)的正负,如果为正,分四种象限情况走步,如果为负,分四种象限情况走步。;逐点法编程另一个思路;void CMyView::OnLine1() { CDC *pDC=GetDC(); COLORREF color=RGB(255,0,0); int x1=0,y1=0; int x2=500,y2=200; int i; int f=0; int x=x1,y=y1;; pDC-SetPixel(x1,y1,color); int k=abs(x2-x1)+abs(y2-y1); for (i=0;ik;i++) { if (f0) { y=y+1; f=f-x2; pDC-SetPixel(x,y,color); } else { x=x+1; f=f+y2; pDC-SetPixel(x,y,color); }

文档评论(0)

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

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

1亿VIP精品文档

相关文档