您好,欢迎访问三七文档
当前位置:首页 > 中学教育 > 初中教育 > 实验3-OpenGL基本图元绘制
实验3OpenGL基本图元绘制1/7实验3、OpenGL基本图元绘制系别:计算机学院专业班级:10信科2班姓名:学号:实验日期:2013-5-10实验报告日期:2013-5-10一、实验目的1熟悉VC6.0开发平台;2熟悉OpenGL开发库;二、实验内容:1.在同一个窗口内绘制以下图元:用不同颜色绘制大小从1到5的5个点;用不同颜色绘制宽度为1、3、5的三条直线段;绘制一条包含5个顶点的折线段;绘制一个三角形,三个顶点颜色各不相同,三角形内部用平滑方式进行填充;绘制一个六边形;2.,不使用反混淆绘制宽度为5的直线;启用反混淆后在不同位置绘制相同的直线,比较两者异同。三、一个OpenGL实例1.程序中有关画图的代码:voidDrawGLScene(GLvoid)//此函数完成图形绘制{glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);//清除颜色缓冲区和深度缓冲区glLoadIdentity();//重置当前模型视图矩阵glTranslatef(-1.5f,0.0f,0.0f);//向左平移50个单位glBegin(GL_TRIANGLES);//绘制三角形glColor3f(1.0f,0.0f,0.0f);//画笔设置为红色glVertex3f(0.0f,1.0f,0.0f);glColor3f(0.0f,1.0f,0.0f);//设置为绿色glVertex3f(-1.0f,-1.0f,0.0f);glColor3f(0.0f,0.0f,1.0f);//设置为蓝色glVertex3f(1.0f,-1.0f,0.0f);glEnd();//完成三角形的绘制glTranslatef(3.0f,0.0f,0.0f);//向右平移3个单位glColor3f(0.0f,1.0f,1.0f);//设为青色glBegin(GL_QUADS);//画四边形glVertex3f(-1.0f,1.0f,0.0f);glVertex3f(1.0f,1.0f,0.0f);glVertex3f(1.0f,-1.0f,0.0f);glVertex3f(-1.0f,-1.0f,0.0f);/glEnd();//完成四边形绘制glFlush();}实验3OpenGL基本图元绘制2/7四、实验报告内容1程序源码;2对主要画图函数的说明(函数的功能,参数等)。//图形.cpp:Definestheentrypointfortheconsoleapplication.//#includeGL/glut.h#includestdio.h#includestdlib.h#includewindows.h#defineMAX10^6;//如果需要记录鼠标点的位置,就定义全局变量来保存structPoint{intx,y;};Pointpt[2];intpointNum=0;//标记点号,0表示线段起点,1表示线段中点voidMyDrawGLScene()//此函数完成图形绘制{inti;floatpSizes[5]={1.0f,2.0f,3.0f,4.0f,5.0f};//设定五个点的大小floatlWidth[5]={1.0f,2.0f,3.0f,4.0f,5.0f};//设定五条直线的宽度glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);//清除颜色缓冲区和深度缓冲区glLoadIdentity();//重置当前模型视图矩阵glTranslatef(-1.8f,-0.1f,0.0f);//向左平移50个单位//绘制五个大小不同的的点glEnable(GL_POINT_SMOOTH);//开启反混淆for(i=0;i5;i++){//绘制五个大小不同的的点glPointSize(pSizes[i]);glTranslatef(0.1f,-0.0f,0.0f);//向右平移50个单位glBegin(GL_POINTS);glColor3f(1.0f,0.0f,0.0f);//画笔设置为红色glVertex2f(1.0f,1.0f);glEnd();}实验3OpenGL基本图元绘制3/7//绘制五条不同宽度的直线glTranslatef(-0.5f,-0.1f,0.0f);//向左平移50个单位for(i=0;i5;i++)//绘制五条不同宽度的直线{glTranslatef(0.0f,-0.1f,0.0f);glLineWidth(lWidth[i]);//设定直线的宽度glBegin(GL_LINES);glColor3f(0.0f,1.0f,0.0f);//画笔设置为绿色glVertex2f(1.0f,1.0f);glVertex2f(2.0f,1.0f);glEnd();}//画五个定点的折线glTranslatef(0.0f,-0.2f,0.0f);//向左平移50个单位glColor3f(0.0f,0.0f,1.0f);//画笔设置为蓝色glLineWidth(3.0f);//设定直线的宽度glBegin(GL_LINE_STRIP);//画五个定点的折线glVertex2f(1.0f,1.0f);glVertex2f(1.2f,1.1f);glVertex2f(1.4f,1.0f);glVertex2f(1.6f,1.1f);glVertex2f(1.8f,1.0f);glEnd();//绘制三角形glTranslatef(1.5f,0.7f,0.0f);//向左平移50个单位glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);//选择三角形的光栅化模式为多边形内部被填充,选用参数GL_FILLglEnable(GL_POLYGON_STIPPLE);//平滑填充三角形glBegin(GL_TRIANGLES);glColor3f(1.0f,0.0f,0.0f);//画笔设置为红色glVertex3f(0.0f,0.15f,0.0f);glColor3f(0.0f,0.5f,0.0f);//设置为绿色glVertex3f(-0.15f,-0.15f,0.0f);glColor3f(0.0f,0.0f,1.0f);//设置为蓝色glVertex3f(0.15f,-0.15f,0.0f);glEnd();//完成三角形的绘制实验3OpenGL基本图元绘制4/7//画正六形glTranslatef(0.5f,0.0f,0.0f);//向右平移0.5个单位glColor3f(0.0f,1.0f,1.0f);//设为青色glBegin(GL_POLYGON);glVertex3f(-0.2f,0.0f,0.0f);glVertex3f(-0.1f,0.1732f,0.0f);glVertex3f(0.1f,0.1732f,0.0f);glVertex3f(0.2f,0.0f,0.0f);glVertex3f(0.1f,-0.1732f,0.0f);glVertex3f(-0.1f,-0.1732f,0.0f);glEnd();//完成正六边形形绘制//使用反混淆绘制宽度为5的直线glTranslatef(-0.4f,-0.3f,0.0f);//向下平移0.3个单位glLineWidth(5.0f);//设定直线的宽度为5glColor3f(0.3f,0.5f,0.9f);//画笔设置为紫色glEnable(GL_LINE_SMOOTH);glBegin(GL_LINES);//使用反混淆绘制宽度为5的直线glVertex3f(-0.5f,-0.1f,0.0f);glVertex3f(0.5f,0.1f,0.0f);glEnd();//不适用反混淆方式绘制宽度为5的直线glDisable(GL_LINE_SMOOTH);//关闭反混淆glBegin(GL_LINES);//不适用反混淆方式绘制宽度为5的直线glVertex3f(-0.1f,-0.1f,0.0f);glVertex3f(0.9f,0.1f,0.0f);glEnd();glFlush();}voidmyDisplay(){glClear(GL_COLOR_BUFFER_BIT);//画图之前先设置画图区的背景色glColor3f(1.0f,0.0f,0.0f);//设置前景色(相当于画笔颜色)LARGE_INTEGERFreq;实验3OpenGL基本图元绘制5/7LARGE_INTEGERstart;LARGE_INTEGERend;QueryPerformanceFrequency(&Freq);//获取时钟周期if(pointNum==2){QueryPerformanceCounter(&start);//获取时钟计数MyDrawGLScene();QueryPerformanceCounter(&end);printf(用时%d微秒\n,(end.QuadPart-start.QuadPart)*1000000/Freq.QuadPart);}glFlush();//强制刷新缓冲,保证绘图命令被立即执行}voidInit(){glClearColor(0.0,0.0,0.0,0.0);glShadeModel(GL_SMOOTH);//设置平滑颜色过渡模式(相当于在两种颜色间进行差值,想象一下线段的两个端点颜色不一样,线段中间该是什么颜色)printf(这是一个演示程序!\n);//在窗口中给出提示}voidReshape(intw,inth){glViewport(0,0,(GLsizei)w,(GLsizei)h);//设置视口大小与窗口大小完全一致glMatrixMode(GL_PROJECTION);//指定当前矩阵为投影矩阵glLoadIdentity();//将投影矩阵初始化为单位矩阵gluOrtho2D(0.0,(GLdouble)w,0.0,(GLdouble)h);//定义二维投影矩阵}//自定义的键盘消息处理函数,需要在main函数中调用对应的回调函数才能起作用voidkeyboard(unsignedcharkey,intx,inty){switch(key){case'c':break;case'r':break;case'x':exit(0);break;default:实验3OpenGL基本图元绘制6/7break;}}voidmouse(intbutton,intstate,intx,inty)//鼠标处理回调函数{if(button==GLUT_LEFT_BUTTON&&state==GLUT_DOWN)//如果鼠标左键按下{if(pointNum==2)pointNum=0;//重新记录线段的端点pt[pointNum].x=x;//保存线段端点的横坐标pt[pointNum].y=600-y;//保存线段端点的纵坐标由于屏幕坐标的纵轴向下,而画图时坐标向上,因此需要取反pointNum++;glutPostRedisplay();}}voidmain(intargc,char*argv[]){glutInit(&argc,argv);glutInitDisplayMode(GLUT_RGB|GLUT_SINGLE);glutInitWindowPosition(100,100);glutInitWindowSize(800,600);glutCreateWindow(HelloWorld!);Init();glutDisplayFunc(myDisplay);glutReshapeFunc(Reshape);glutKeyboardFunc(keyboard);//注册键盘函数glutMouseFunc(mouse);//注册鼠标处理函数glutMainLoop();inta=35,b=12;}实验3OpenGL基本图元绘制7/7
本文标题:实验3-OpenGL基本图元绘制
链接地址:https://www.777doc.com/doc-4897505 .html