第2章 光栅图形学.ppt
《第2章 光栅图形学.ppt》由会员分享,可在线阅读,更多相关《第2章 光栅图形学.ppt(58页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第2章章光栅图形学光栅图形学2002年10月24日12023/4/3上海交通大学计算机系 何援军2r直线光栅化算法直线光栅化算法qDDA算法算法qBresenham算法算法r圆光栅化算法圆光栅化算法q中点算法中点算法q中点整数算法中点整数算法q中点整数优化算法中点整数优化算法22023/4/3上海交通大学计算机系 何援军32.1直线光栅化算法直线光栅化算法rDDA算法(算法(DigitalDifferentialAnalyzer)rBresenham算法算法32023/4/3上海交通大学计算机系 何援军42.1.1DDA算法算法rDDA算法(算法(DigitalDifferentialAna
2、lyzer)q基本原理基本原理q根据直线的增量方程根据直线的增量方程nxi+1=xi+xnyi+1=yi+kxq算得直线理论点的坐标四舍五入得到光栅点算得直线理论点的坐标四舍五入得到光栅点q算法实现算法实现qDavidF.Rogers的描述的描述(适用于所有象限适用于所有象限)qJamesD.Foley的描述的描述(第一象限,且第一象限,且K1)q本教程的描述本教程的描述(适用于所有象限及任何端点适用于所有象限及任何端点)42023/4/3上海交通大学计算机系 何援军51)DavidF.Rogers描述描述r直线的基本微分方程是:直线的基本微分方程是:rDy/Dx常数常数(k)r设直线通过点设
3、直线通过点P1(x1,y1)和和P2(x2,yDy/Dx),r则直线方程可表示为:则直线方程可表示为:rDy/Dx=(y2-y1)/(x2-x1)=k52023/4/3上海交通大学计算机系 何援军61)DavidF.Rogers描述描述r如果已知第如果已知第i点的坐标,可用步长点的坐标,可用步长StepX和和StepY得到第得到第i+1点的坐标为:点的坐标为:qxi+1=xi+StepXqyi+1=yi+StepY或或yi+1=yi+kStepXr例图中例图中q0k1qStepX=1qStepY=kr将算得的直线上每个点将算得的直线上每个点的当前坐标,按四舍五的当前坐标,按四舍五入得到光栅点的
4、位置入得到光栅点的位置62023/4/3上海交通大学计算机系 何援军71)DavidF.Rogers描述描述/DigitalDifferentialAnalyzer(DDA)routineforrasterizingaline/Thelineendpointsare(xs,ys)and(xe,ye)assumednotequal./Roundisthefunction.Note:ManyRound functionsarefloorfunctions,i.eRound(-8.5)=-9ratherthan-8.Thealgorithmassumesthisisthecase./Approxim
5、atethelinelengthif(|xs-xe|ys-ye|)then/插补长度插补长度Length|xs-xe|;elseLength|ys-ye|;end if72023/4/3上海交通大学计算机系 何援军81)DavidF.Rogers描述描述/Selectthelargerofxorytobeonerasterunit.StepX=(xe-xs)/Length;StepY=(ye-ys)/Length;x=xs;/首点首点y=ys;i=1;/Beginmainloopwhile(iLength)WritePixel(Round(x),Round(y),value);x=x+Step
6、X;y=y+StepY;i+;end while82023/4/3上海交通大学计算机系 何援军92)JamesD.Foley描述描述r令令k=(y2-y1)/(x2-x1)r有:有:yi+1=yi+kStepXr若若0kyq因光栅单位为因光栅单位为1,q可以采用每次可以采用每次x方向增加方向增加1,q而而y方向增加方向增加k的办法得到下一个直线点。的办法得到下一个直线点。92023/4/3上海交通大学计算机系 何援军102)JamesD.Foley描述描述rvoid Line(/设设0k1,xsxerint xs,ys;/左端点左端点rintxe,ye;/右端点右端点rintvalue)/赋给
7、线上的象数值赋给线上的象数值rrint x;/x以步长为单位从以步长为单位从xs增长到增长到xerdouble dx=xe-xs;rdouble dy=ye-ys;rdouble k=dy/dx;/直线之斜率直线之斜率krdoubley=ys;rfor(x=xs;x=xe;x+)rWritePixel(x,Round(y),value);/置象数值为置象数值为valuery+=k;/y移动步长是斜率移动步长是斜率kr/Endofforr/Line102023/4/3上海交通大学计算机系 何援军113)已有算法描述分析已有算法描述分析rRogers描述:描述:q采用采用x=x+StepX,y=y
8、+StepY,q逼近点并不一定是直线的一个最好的逼近;逼近点并不一定是直线的一个最好的逼近;rD.Foley描述:描述:q未分析直线端点不在象素点上的情况;未分析直线端点不在象素点上的情况;q只给出只给出045卦限的描述。卦限的描述。r为避免引起积累误差,为避免引起积累误差,D.Foley描述中采用描述中采用qdoubledx=xe-xs;qdoubledy=ye-ys;qdoublek=dy/dx;/直线之斜率直线之斜率k112023/4/3上海交通大学计算机系 何援军124)本教程描述本教程描述几个注记几个注记122023/4/3上海交通大学计算机系 何援军134)本教程描述本教程描述任意
9、方向直线插补算法任意方向直线插补算法任意方向直线插补算法任意方向直线插补算法rvoidDDALine(rfloatxs,ys;/起点起点rfloatxe,ye;/终点终点rintvalue;/赋给线上的象数值赋给线上的象数值rrintn,ix,iy,idx,idy;rintFlag;/插补方向标记插补方向标记rint Length;/插补长度插补长度rfloat x,y,dx,dy;132023/4/3上海交通大学计算机系 何援军144)本教程描述本教程描述任意方向直线插补算法任意方向直线插补算法任意方向直线插补算法任意方向直线插补算法rdx=xe-xs;rdy=ye-ys;r/初始点处理初始
10、点处理rif(fabs(dy)fabs(dx)/x方向跨距长,方向跨距长,|斜率斜率|1rLength=abs(Round(ye)-Round(ys);rFlag=0;riy=Round(ys);/初始初始y点点ridy=isign(dy);/y方向单位增量方向单位增量rx=xs+dx/dy*(float)(iy)-ys);/初始初始x点修正点修正rdx=dx/fabs(dy);/x方向斜率增量方向斜率增量r152023/4/3上海交通大学计算机系 何援军164)本教程描述本教程描述任意方向直线插补算法任意方向直线插补算法任意方向直线插补算法任意方向直线插补算法rif (Flag)/x方向单位
11、增量方向单位增量rfor (n=0;n=Length;n+)/x方向插补过程方向插补过程rWritePixel(ix,Round(y),value);rix+=idx;ry+=dy;r/Endofforr/Endofif162023/4/3上海交通大学计算机系 何援军174)本教程描述本教程描述任意方向直线插补算法任意方向直线插补算法任意方向直线插补算法任意方向直线插补算法r else/y方向斜率增量方向斜率增量rfor(n=0;n=Length;n+)/y方向插补过程方向插补过程rWritePixel(Round(x),iy,value);riy+=idy;rx+=dx;r/Endoffor
12、r/Endofelser/Finish172023/4/3上海交通大学计算机系 何援军184)本教程描述本教程描述首点校正对逼近的影响首点校正对逼近的影响首点校正对逼近的影响首点校正对逼近的影响182023/4/3上海交通大学计算机系 何援军192.1.2Bresenham算法算法rBresenham算法算法q基本原理基本原理qBresenham算法算法q整数整数Bresenham算法算法q一般整数一般整数Bresenham算法算法192023/4/3上海交通大学计算机系 何援军202.1.2Bresenham算法算法r从另一个角度看直线光栅化算法的原理:从另一个角度看直线光栅化算法的原理:q
13、一个方向上每次递增(减)一个方向上每次递增(减)1个单位个单位q另一个方向的递增(减)量为另一个方向的递增(减)量为0或或1q取决于实际直线与最近光栅网格点的距离取决于实际直线与最近光栅网格点的距离q这个距离的最大误差为这个距离的最大误差为0.5。202023/4/3上海交通大学计算机系 何援军211)Bresenham的基本原理的基本原理r假定直线斜率假定直线斜率k在在01之间。之间。q考虑考虑x方向每次递增方向每次递增1个单位个单位q决定决定y方向每次递增方向每次递增0或或1。r从从“四舍五入四舍五入”的观点:的观点:r下一个直线的点应为下一个直线的点应为(xi+1,y+k)qy递增递增k
14、后,与当前光栅点误差超过后,与当前光栅点误差超过0.5,递增,递增1qy递增递增k后,与当前光栅点误差小于后,与当前光栅点误差小于0.5,递增,递增0qy递增递增k后,与当前光栅点误差等于后,与当前光栅点误差等于0.5,递增,递增0/1212023/4/3上海交通大学计算机系 何援军221)Bresenham的基本原理的基本原理r引入误差项参数引入误差项参数d:直线与最近光栅点的:直线与最近光栅点的误差,有:误差,有:0d1当当d=0)theny=y+1;/取右上光栅点取右上光栅点d=d-1;/最近光栅点更新最近光栅点更新endifd=d+k;/下一点,下一点,误差更新误差更新r误差项误差项d
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第2章 光栅图形学 光栅 图形学
限制150内