欢迎来到天天文库
浏览记录
ID:28015756
大小:118.04 KB
页数:7页
时间:2018-12-07
《实验二直线光栅化算法》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、实验二直线和三角形光栅化算法数媒1301徐潞滨201326810522一、实验原理DDA算法主要是根据直线公式y=kx+b来推导出来的,其关键之处在于如何设定单位步进,即一个方向的步进为单位步进,另一个方向的步进必然是小于1。算法的具体思路如下:1.输入直线的起点、终点;2.计算x方向的间距:AX和y方向的间距:AY。3.确定单位步进,取MaxSteps=max(AX,AY);gAX〉=AY,则X方向的步进力单位步进,X方向步进一个单位,Y方向步进AY/MaxSteps;否则相反。4.设置第一个点的像素值5.令循环初始值为1,循环次数为MaxSte
2、ps,定义变量x,y,执行以下汁算:a.x增加一个单位步进,y增加一个单位步进b.设置位置为(X/y)的像素值二、代码设计和说明^include^include#includevoidLine(doublexl,doubleyl,doublex2,doubley2)floatx,y,dx,dy;intk,i;if(abs(x2~xl)>=abs(y2_yl)){k二abs(x2-xl);}else{k=abs(y2-yl);}dx=(float)(x2-xl)/k;dy=(float)(y2
3、-yl)/k;x=(float)(xl);y=(float)(yl);for(i=0;i4、;voidinit(void){/*selectclearingcolor*/glClearColor(0.0,0.0,0.0,0.0):/*initializeviewingvalues*/glMatrixMode(GL一PROJECTI⑽;glboadldcntity();glu0rtho2D(0,500,0,500);}/*anddisplaymodewith"hello"*Declareinitialwindowsize,position,*(singlebufferandRGBA).Openwindow*initstitlebar.Cal5、1initializationroutines.*Registercallbackfunctiontodisplaygraphics.*Entermainloopandprocessevents.*/intmain(intargc,char**argv)glutTnit(&argc,argv);glutTnitDisplayMode(GLUTSINGLE6、GLUTRGB);//设0?S?窗氾?口U大洙?小?,?以?像?素?为a单蹋?位?glutInitWindowSize(500,500);glutInitWindowPosition(100,107、0);glutCreateWindow(〃光a栅Q化一算?法*?直±线?〃);init();glutDisplciyFunc(display);glutMciinLoopO;return0;/*ANSICrequiresmaintoreturnint.}三、实验运行结果(包含用户输入和输出)三voiddisplay(){/木clearallpixels木/glClear(GL_COLOR_BUFFER_BIT):Line(0,0,100,100):Line(0,0,200,100):Line(0,0,300,100):glFlushO;}在disp8、lay函数中输入如上数据;显示出如图3条不同斜率直线
4、;voidinit(void){/*selectclearingcolor*/glClearColor(0.0,0.0,0.0,0.0):/*initializeviewingvalues*/glMatrixMode(GL一PROJECTI⑽;glboadldcntity();glu0rtho2D(0,500,0,500);}/*anddisplaymodewith"hello"*Declareinitialwindowsize,position,*(singlebufferandRGBA).Openwindow*initstitlebar.Cal
5、1initializationroutines.*Registercallbackfunctiontodisplaygraphics.*Entermainloopandprocessevents.*/intmain(intargc,char**argv)glutTnit(&argc,argv);glutTnitDisplayMode(GLUTSINGLE
6、GLUTRGB);//设0?S?窗氾?口U大洙?小?,?以?像?素?为a单蹋?位?glutInitWindowSize(500,500);glutInitWindowPosition(100,10
7、0);glutCreateWindow(〃光a栅Q化一算?法*?直±线?〃);init();glutDisplciyFunc(display);glutMciinLoopO;return0;/*ANSICrequiresmaintoreturnint.}三、实验运行结果(包含用户输入和输出)三voiddisplay(){/木clearallpixels木/glClear(GL_COLOR_BUFFER_BIT):Line(0,0,100,100):Line(0,0,200,100):Line(0,0,300,100):glFlushO;}在disp
8、lay函数中输入如上数据;显示出如图3条不同斜率直线
此文档下载收益归作者所有