- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
— PAGE \* Arabic 1 —
计算机图形学实习报告1
西北农林科技大学实验报告 学院名称: 专业年级: 姓 名: 学 号: 课 程: 报告日期: 实验一 基本图形元素生成算法 1.实验目的: 1)熟练掌握基本图形元素生成算法。 2)对高级语言的图形模式的设定有比较详细的了解。 3)对基本图形类(或函数)的调用方法有一个比较详细的了解。 2.实验内容: 1)DDA 算法画直线算法。 2)编写源程序,在计算机上编译运行,画出正确的图形和输出交点坐标。 3.实验步骤: 1)DDA 算法: 算法的主要思想: 由于课本上已经给出了斜率m ∈[-1,1]上的算法,故此处给出斜率m ∈[1,+∞〕上的算法,m ∈(-∞,-1]上的可同理推导。 已知待扫描转换的直线为0p (x0,y0),1(1,1)p x y ,又10,10x x x y y y ?=-?=-, 则设k=1/m=/x y ??(即k ∈(0,1])。直线方程为1y x B k =+,即()x k y B =-。 以一个像素为单位分割区间[y0,y1],由x0x1,故y0y1,得到[y0,y1]上的一个划分:0y ,1y ,….n y ,其中1i y +=i y +1,得到点列{}0(,)n i i i x y =,由公式 11()(1)i i i i x k y B k y B x k ++=-=+-=+ 故从i x 直接得到1i x +。i x 可能为浮点数,要对它取整,实际得到像素集{},0(,)n i i r i x y =。 初值为:(00,x y )=(x0,y0)。 2)编写程序的源程序(原点为窗口中心,使用DDA 算法生成的(5,5)到(20,20)的直线段) #includeabs(dy)) epsl=abs(dx); else epsl=abs(dy); xIncre=(GLfloat)dx/(GLfloat)epsl; yIncre=(GLfloat)dy/(GLfloat)epsl; glBegin(GL_POINTS); for(k=0;k=epsl;k++) { glVertex3f(GLint(x+0.5),(GLint)(y+0.5),0); x+=xIncre; y+=yIncre; } glEnd(); // glBegin(GL_LINES); // glVertex3f(5,10,0); // glVertex3f(20,25,0); // glEnd(); glutSwapBuffers(); } void ChangeSize(GLsizei w,GLsizei h) { GLfloat nRange = 100.0f; if(h==0) h=1; glViewport(0,0,w,h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); if(w=h) glOrtho(-nRange,nRange,-nRange*h/w,nRange*h/w,-nRange,nRange); else glOrtho(-nRange*w/h,nRange*w/h,-nRange,nRange,-nRange,nRange); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); } int main(int argc,char* argv[]) { glutInit( glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|GLUT_DEPTH); glutCreateWindow(DDALine); glutReshapeFunc(ChangeSize); glutDisplayFunc(RenderScene); SetupRC(); glutMainLoop(); return 0; } 注意:要运行以上程序需要需
文档评论(0)