当前位置:新励学网 > 秒知问答 > 求教OPENGL初步平面图形

求教OPENGL初步平面图形

发表时间:2024-08-20 19:00:55 来源:网友投稿

//主要绘制函数为Drawing#include#include#include//GLFrameframeCamera;staticGLfloatxRot=0.0f;staticGLfloatyRot=0.0f;constintn=1000;//圆的分段数constGLfloatPi=3.1415926536f;//设置初始状态voidSetupRC(void){ glPolygonMode(GL_FRONT_AND_BACK,GL_LINE);//默认情况是没有此句的glEnable(GL_DEPTH_TEST);// glEnable(GL_CULL_FACE);// glFrontFace(GL_CCW); GLfloatambientLight[]={1.0,1.0,1.0,1.0}; glEnable(GL_LIGHTING); glLightModelfv(GL_LIGHT_MODEL_AMBIENT,ambientLight); glEnable(GL_COLOR_MATERIAL); glColorMaterial(GL_FRONT,GL_AMBIENT_AND_DIFFUSE); glClearColor(1.0f,1.0f,1.0f,1.0f);}//窗口形状改变时调用voidChangeSize(GLsizeiw,GLsizeih){ GLfloataspectRatio; if(h==0) h=1; glViewport(0,0,w,h); aspectRatio=(GLfloat)w/(GLfloat)h; glMatrixMode(GL_PROJECTION); glLoadIdentity(); //gluPerspective(45.0f,aspectRatio,1.0,400.0); if(w<=h) glOrtho(-400.0,400.0,-400/aspectRatio,400/aspectRatio,200.0,-200.0); else glOrtho(-400.0*aspectRatio,400.0*aspectRatio,-400.0,400.0,200.0,-200.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity();}voidSpecialKeys(intkey,intx,inty){ if(key==GLUT_KEY_UP) xRot-=2.0f; if(key==GLUT_KEY_DOWN) xRot+=2.0f; if(key==GLUT_KEY_LEFT) yRot-=2.0f; if(key==GLUT_KEY_RIGHT) yRot+=2.0f;xRot=(GLfloat)((constint)xRot%360);yRot=(GLfloat)((constint)yRot%360); glutPostRedisplay();}voidDrawing(){ floati; floatR1=50;//大圆中的100 floatR2=100;//大圆中的200 floatr1=5;//小圆中的10 floatr2=20;//小圆中的40 floatRh=50;//倒角50glColor3f(0.0,0.0,0.0);////////大圆中的100 glPushMatrix(); glBegin(GL_LINE_LOOP);for(i=0;i<n;++i)glVertex2f(R1*cos(2*Pi/n*i),R1*sin(2*Pi/n*i)); glEnd(); glBegin(GL_LINE_LOOP); //大圆中的200for(i=0;i<n;++i)glVertex2f(R2*cos(2*Pi/n*i),R2*sin(2*Pi/n*i));glEnd(); glPopMatrix();////////////////////////////// //上小圆中的10 glPushMatrix(); glTranslatef(-210,50,0); glBegin(GL_LINE_LOOP);for(i=0;i<n;++i)glVertex2f(r1*cos(2*Pi/n*i),r1*sin(2*Pi/n*i)); glEnd(); glBegin(GL_LINE_LOOP); //上小圆中的40for(i=0;i<n;++i)glVertex2f(r2*cos(2*Pi/n*i),r2*sin(2*Pi/n*i));glEnd(); //上倒角50 glBegin(GL_LINE_STRIP);for(i=0;i<n;++i)glVertex2f(Rh*cos(0.5*Pi/n*i+0.5*Pi),Rh*sin(0.5*Pi/n*i+0.5*Pi));glEnd(); glPopMatrix();////////////////////////////////////////// //下小圆中的10 glPushMatrix(); glTranslatef(-210,-50,0); glBegin(GL_LINE_LOOP);for(i=0;i<n;++i)glVertex2f(r1*cos(2*Pi/n*i),r1*sin(2*Pi/n*i));glEnd(); //下小圆中的40 glBegin(GL_LINE_LOOP);for(i=0;i<n;++i)glVertex2f(r2*cos(2*Pi/n*i),r2*sin(2*Pi/n*i));glEnd(); //下倒角50 glBegin(GL_LINE_STRIP);for(i=0;i<n;++i)glVertex2f(Rh*cos(0.5*Pi/n*i+Pi),Rh*sin(0.5*Pi/n*i+Pi));glEnd(); glPopMatrix();/////////////////////////////////////////////// //边线 glPushMatrix(); glBegin(GL_LINES); glVertex3f(0,100,0); glVertex3f(-210,100,0); glVertex3f(0,-100,0); glVertex3f(-210,-100,0); glVertex3f(-260,50,0); glVertex3f(-260,-50,0); glEnd(); glPopMatrix();}voidRenderScene(void){ glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glLoadIdentity();//重要 gluLookAt(0,0,100,0,0,0,0.0,1.0,0.0);//重要(当要执行键盘控制方向变换时,此项要保持默认值) glPushMatrix(); glRotatef(xRot,1.0f,0.0f,0.0f);//键盘控制视角变换glRotatef(yRot,0.0f,1.0f,0.0f); glColor3f(1.0,0.0,0.0); glBegin(GL_LINES); glVertex3f(-400,0,0); glVertex3f(400,0,0); glVertex3f(0,-300,0); glVertex3f(0,300,0); glVertex3f(0,0,-400); glVertex3f(0,0,400); glEnd(); Drawing(); glPopMatrix(); glutSwapBuffers();}intmain(intargc,char*argv[]){ glutInit(&argc,argv); glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|GLUT_DEPTH); glutInitWindowSize(800,600); glutInitWindowPosition(100,100); glutCreateWindow(啊啊啊); glutReshapeFunc(ChangeSize); glutSpecialFunc(SpecialKeys); glutDisplayFunc(RenderScene); SetupRC(); glutMainLoop(); return0;}

免责声明:本站发布的教育资讯(图片、视频和文字)以本站原创、转载和分享为主,文章观点不代表本网站立场。

如果本文侵犯了您的权益,请联系底部站长邮箱进行举报反馈,一经查实,我们将在第一时间处理,感谢您对本站的关注!