下载

0下载券

加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 OpenGL画直线、圆、椭圆

OpenGL画直线、圆、椭圆.doc

OpenGL画直线、圆、椭圆

李一扬
2017-11-27 0人阅读 举报 0 0 0 暂无简介

简介:本文档为《OpenGL画直线、圆、椭圆doc》,可适用于职业岗位领域

OpenGL画直线、圆、椭圆使用openGl画直线(DDA算法)、画圆、椭圆(Bresenham算法)#include<stdlibh>#include<iostreamh>#include<GLgluth>*initialization:*voidmyinit(void){*attributes*glClearColor(,,,)设置背景颜色glColorf(,,)设置绘制颜色为红色*setupviewing:**xwindowwithoriginlowerleft*glMatrixMode(GLPROJECTION)指定设置投影参数glLoadIdentity()*OpenGL为我们提供了一个非常简单的恢复初始坐标系的手段那就是调用glLoadIdentity()命令。该命令是一个无参的无值函数其功能是用一个×的单位矩阵来替换当前矩阵实际上就是对当前矩阵进行初始化。也就是说无论以前进行了多少次矩阵变换在该命令执行后当前矩阵均恢复成一个单位矩阵即相当于没有进行任何矩阵变换状态。*gluOrthoD(,,,)设置投影参数glMatrixMode(GLMODELVIEW)*这两个都是glMatrixMode()函数的参数那就先说说glMatrixMode吧~这个函数其实就是对接下来要做什么进行一下声明也就是在要做下一步之前告诉计算机我要对“什么”进行操作了这个“什么”在glMatrixMode的“()”里的选项(参数)有GLPROJECTIONGLMODELVIEW和GLTEXTURE如果参数是GLPROJECTION这个是投影的意思就是要对投影相关进行操作也就是把物体投影到一个平面上就像我们照相一样把维物体投到维的平面上。这样接下来的语句可以是跟透视相关的函数比如glFrustum()或gluP‎‎erspective()如果参数是GLMODELVIEW这个是对模型视景的操作接下来的语句描绘一个以模型为基础的适应这样来设置参数接下来用到的就是像gluLookAt()这样的函数若是GLTEXTURE就是对纹理相关进行操作顺便说下OpenGL里面的操作很多是基于对矩阵的操作的比如位移旋转缩放所以这里其实说的规范一点就是glMatrixMode是用来指定哪一个矩阵是当前矩阵而它的参数代表要操作的目标GLPROJECTION是对投影矩阵操作GLMODELVIEW是对模型视景矩阵操作GLTEXTURE是对纹理矩阵进行随后的操作。*}voidplotcirclepoints(intxc,intyc,intx,inty)画圆{glBegin(GLPOINTS)glVertexf(xcx,ycy,)glVertexf(xcx,ycy,)glVertexf(xcx,ycy,)xcx,ycy,)glVertexf(glVertexf(xcy,ycx,)glVertexf(xcy,ycx,)glVertexf(xcy,ycx,)glVertexf(xcy,ycx,)glEnd()}voiddrawcircle(intxc,intyc,intradius){intx,y,px=y=radiusp=*radiusglClear(GLCOLORBUFFERBIT)glBegin(GLPOINTS)while(x<y){plotcirclepoints(xc,yc,x,y)if(p<)p=p*xelse{p=p*(xy)y=}x=}if(x==y)plotcirclepoints(xc,yc,x,y)}voidputpixel(intxc,intyc,intx,inty)画椭圆{glBegin(GLPOINTS)glVertexf(xcx,ycy,)glEnd()}voiddrawEllipse(intxc,intyc,inta,intb){intx,yfloatd,dx=y=bd=b*ba*a*(b)putpixel(xc,yc,x,y)putpixel(xc,yc,x,y)putpixel(xc,yc,x,y)putpixel(xc,yc,x,y)while(b*b*(x)<a*a*(y)){if(d<){d=b*b*(*x)x}else{d=b*b*(*x)a*a*(*y)xy}putpixel(xc,yc,x,y)putpixel(xc,yc,x,y)putpixel(xc,yc,x,y)putpixel(xc,yc,x,y)}d=b*b*(x)*(x)a*a*(y)*(y)a*a*b*bwhile(y>){if(d<=){d=b*b*(*x)a*a*(*y)xy}else{d=a*a*(*y)y}putpixel(xc,yc,x,y)putpixel(xc,yc,x,y)putpixel(xc,yc,x,y)putpixel(xc,yc,x,y)}}voidddaline(intxa,intya,intxb,intyb)画直线{GLfloatdeltax,deltay,x,yintdx,dy,stepsdx=xbxady=ybyaif(abs(dx)>abs(dy))steps=abs(dx)elsesteps=abs(dy)deltax=(GLfloat)dx(GLfloat)stepsdeltay=(GLfloat)dy(GLfloat)stepsx=xay=yaglClear(GLCOLORBUFFERBIT)glBegin(GLPOINTS)glVertexf(x,y,)for(intk=k<=stepsk){x=deltaxy=deltayglBegin(GLPOINTS)glVertexf(x,y,)glEnd()}}*thedisplaycallback:*voiddisplay()画直线{glClear(GLCOLORBUFFERBIT)*clearthewindow*glViewport(,,,)ddaline(,,,)glFlush()}voiddisplay()画圆{glClear(GLCOLORBUFFERBIT)*clearthewindow*glViewport(,,,)drawcircle(,,)glFlush()}voiddisplay()画椭圆{glClear(GLCOLORBUFFERBIT)*clearthewindow*glViewport(,,,)drawEllipse(,,,)glFlush()}intmain(intargc,char**argv){*StandardGLUTinitialization*glutInit(argc,argv)glutInitDisplayMode(GLUTSINGLE|GLUTRGB)初始化窗口的显示模式glutInitWindowSize(,)设置窗口的尺寸glutInitWindowPosition(,)是指窗口的位置cout<<"************************************************"<<endlcout<<"****请选择如下操作:*****"<<endlcout<<"****用DDA画线*****"<<endlcout<<"****用Bresenham算法画圆*****"<<endlcout<<"****用Bresenham算法画椭圆*****"<<endlcout<<"************************************************"<<endlcout<<"请选择如下操作:"intchoicecin>>choiceswitch(choice){case:glutCreateWindow("Bresenham算法画直线")给窗口命名glutDisplayFunc(display)设置当前窗口的显示回调函数myinit()完成窗口初始化glutMainLoop()启动主GLUT事件处理循环breakcase:glutCreateWindow("Bresenham算法画圆")glutDisplayFunc(display)myinit()glutMainLoop()breakcase:glutCreateWindow("MidBresenham算法画椭圆")glutDisplayFunc(display)myinit()glutMainLoop()default:return}return}

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

评分:

/10

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利