计算图形学实验报告实验四OpenGL多边形存储及绘制序号:姓名:学号:成绩指导教师:廖赟1.实验目的:基于OpenGL画点函数,读取box.obj文件中的顶点坐标,绘制多边形。2实验环境:(1)运行win7/win8/win10操作系统的PC一台(2)每台PC机安装VC++开发环境3.实验步骤:a、读取box.obj中顶点信息,如下。b、其中行开头v代表顶点,之后两个数字表示顶点坐标(X,Y),坐标原点(0,0)位于窗口左下角。c、其中行开头f代表多边形顶点索引,之后数字表示多边形顶点索引,索引下标从0开始,下标0表示顶点数据第一行,下标1表示顶点数据第二行,以此类推。d、实现顶点表及面片表相关数据结构。e、绘制索引所要求的两个多边形。4.实验分析,回答下列问题(1)算法流程图计算图形学实验报告lineSegment():NoReadFile():YesNoYesyesyesnonoyesnonoyesyesno计算图形学实验报告(2)多边形绘制算法代码(包含完整注释)答:#includewindows.h#includeiostream#includefstream#defineGLUT_DISABLE_ATEXIT_HACK#includeGL.h#includeGLU.h#includeGLUT.husingnamespacestd;intv[100];intf[10][10];voidinit(void){glClearColor(1.0,1.0,1.0,0.0);//设置窗口背景颜色为白色glMatrixMode(GL_PROJECTION);//设置投影参数gluOrtho2D(0.0,400.0,0.0,450.0);}voidlineSegment(void){noyesyesnoyesyesno计算图形学实验报告glClear(GL_COLOR_BUFFER_BIT);glColor3f(0.0,0.0,0.0);//设置点颜色for(inty=0,j=1;f[j][0]!=f[j][1];j++){for(;f[j][y+1]!=f[j][0];y++){//第一个多边形glBegin(GL_LINES);glVertex2i(v[2*f[j][y]],v[2*f[j][y]+1]);glVertex2i(v[2*f[j][y+1]],v[2*f[j][y+1]+1]);glEnd();}//第二个多边形glBegin(GL_LINES);glVertex2i(v[2*f[j][y]],v[2*f[j][y]+1]);glVertex2i(v[2*f[j][0]],v[2*f[j][0]+1]);glEnd();y=0;}glFlush();}voidReadFile(){ifstreamin;stringfile;in.open(E:/学校学习/计算机图形学/计算机图形学_实验4/box.obj);if(!in){printf(打开失败);}charch;intnum=0;inti=0;boolisv=true;//为true存入数组vboolisf=false;//为true存入数组fintj=0;inty=0;while(!in.eof()){in.read(&ch,1);//每次读取一个字节存在ch中if(ch=='f'){isv=false;计算图形学实验报告j++;y=0;}if(isv){if(ch=48&&ch=57)num=num*10+(int)ch-48;//计算顶点坐标值,48对应‘0’,57对应‘9’if(ch==''){if(num!=0)v[i++]=num;//存入顶点坐标值num=0;}}else{if(ch=48&&ch=57)num=num*10+(int)ch-48,isf=true;//计算顶点索引if(ch==''){if(isf)f[j][y++]=num,isf=false;;//存入顶点索引值num=0;}}}}intmain(intargc,CHAR*argv[]){glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);//初始化窗口的显示模式glutInitWindowPosition(50,100);//设置窗口的位置glutCreateWindow(linesegment);//创建一个名为linesegment的窗口ReadFile();init();//完成窗口初始化glutDisplayFunc(lineSegment);//设置当前窗口的显示回调函数glutMainLoop();//启动主GLUT事件处理循环return0;}计算图形学实验报告(3)简述多边形机内表示形式?答:多边形在机内以数据表的形式表示。在输入每个多边形的信息时,数据放进一些表格中等待后续处理、显示和场景的对象管理。这些多边形数据表分成几何数据表和属性数据表。几何数据表存放顶点坐标和标识多边形面片空间方向的参数,属性数据表存放指定对象的透明度及其表面的反射性能和纹理特征。对象的几何数据可以存储在顶点表、边表和面片表中。顶点表内存放多边形顶点的坐标值,边表包含指向顶点表的指针以确定每个多边形每条边的端点,面片表包含指向边表的指针已确定每个多边形的边。