您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 其它文档 > 97计算机图形学实验报告
实验一3D模型的加载、渲染与三维操作学院:专业班级:指导老师:学号:姓名:完成日期:目录一、实验目的.................................................................................................................................3二、使用的工具软件及环境...........................................................................................................3三、实验内容...................................................................................................................................3四、实验步骤...................................................................................................................................3五、思考.......................................................................................................................................12一、实验目的1、掌握在MicrosoftVisualStudio环境中使用OpenGL、GLUT和GLUI;2、了解计算机图形学固定流水线;3、了解OpenGL编程基础;4、掌握三维观察的数学表达和程序实现;5、掌握多边形网格的绘制;二、使用的工具软件及环境MicrosoftVisualStudio2010、OpenGL、Glut、Glui三、实验内容1、在VS2010中配置OpenGL环境;2、编译简单的GLUT程序;3、编译GLUI源代码,并在调试模式下执行6个示例程序;4、在给定的工程中添加绘制简单几何体的代码;5、在给定的工程中添加读取、绘制三维模型的代码;6、在给定的工程中添加旋转、平移和缩放的控制代码;四、实验步骤1、安装MicrosoftVisualStudio软件版本选择:MicrosoftVisualStudio2010以上版本2、VS2010中配置GLUT1)下载GLUT。Windows环境下的GLUT下载地址:)将下载的压缩包解开,将得到5个文件:glut.h、glut.lib、glut32.lib、glut.dll、glut32.dll。3)将glut.h放到%WinDir%\ProgramFiles(x86)\MicrosoftSDKs\Windows\v7.0A\Include\gl\文件夹中。4)将glut.lib和glut32.lib放到%WinDir%\ProgramFiles(x86)\MicrosoftVisualStudio10.0\VC\lib\文件夹中。5)将glut.dll和glut32.dll放到%WinDir%\system32文件夹(32位操作系统)或者%WinDir%\SysWOW64文件夹(64位操作系统)。3、测试GLUT配置环境1)打开VS2010,选择文件-新建-项目,选择Win32控制台应用程序,填入合适的名字如OpenGLTest,然后选择确定。2)在弹出的对话框中点击下一步,然后在附加选项中选择空项目,点击完成。3)然后向该工程添加一个源代码文件,取名为OpenGLTest.cpp。4)向OpenGLTest.c中添加代码(可在公共邮箱下载)#includeGL/glut.h#includegl/gl.h#includegl/GLU.hvoidmyDisplay(){glClear(GL_COLOR_BUFFER_BIT);glRectf(-0.5f,-0.5f,0.5f,0.5f);glFlush();}intmain(intargc,char*argv[]){glutInit(&argc,argv);glutInitDisplayMode(GLUT_RGB|GLUT_SINGLE);glutInitWindowPosition(100,100);glutInitWindowSize(400,400);glutCreateWindow(第一个OpenGL程序);glutDisplayFunc(&myDisplay);glutMainLoop();return0;}5)设置必要的静态链接库列表选择“项目-属性-链接器-输入-附加包含目录”,填写必要的静态链接库列表,如“opengl32.lib;glu32.lib;glut32.lib”6)编译、链接、执行该程序,生成一个黑色的窗口,中央显示一个白色的矩形,表明配置环境正确。4、编译GLUI库文件和示例程序在公共邮箱中下载GLUI源代码并解压到合适的目录用VS2010打开glui-2.36\src\msvc目录下的glui.sln解决方案文件。在“解决方案资源管理器”中右键点击“解决方案glui”项,点击批生成,勾选前四项,点击生成。在“解决方案资源管理器”中右键点击“解决方案glui”项,点击批生成,取消选择前四项,勾选其余项,点击生成。在glui-2.36\src\msvc\bin目录下可见到生成的动态链接库文件以及可执行文件。在glui-2.36\src\msvc\lib目录下可见到生成的静态链接库文件。将glui相关的头文件、静态链接库文件、动态链接库文件依次放入4.2节中所述目录下。5、编译MeshViewer示例程序从公共邮箱中下载MeshViewer示例程序,试编译运行。6、在示例程序中添加代码实现下述功能1)在MeshViewer.cpp文件myGlutDisplay函数的相应位置,添加绘制圆柱的代码voidDrawCylinder(){//绘制圆柱体floath=1.0f;//绘制上面的圆glBegin(GL_TRIANGLES);glNormal3f(0.0f,0.0f,1.0f);//确定法向for(inti=0;i=n;i++){//点的顺序(n,h),(0,h),(n+1,h)glVertex3f(R*cos((2*Pi)*i/n),R*sin((2*Pi)*i/n),h);glVertex3f(0,0,h);glVertex3f(R*cos((2*Pi)*(i+1)/n),R*sin((2*Pi)*(i+1)/n),h);}glEnd();//绘制下面的圆glBegin(GL_TRIANGLES);glNormal3f(0.0f,0.0f,-1.0f);//确定法向for(inti=0;i=n;i++){//点的顺序(n,0),(n+1,0),(0,0)glVertex3f(R*cos((2*Pi)*i/n),R*sin((2*Pi)*i/n),-h);glVertex3f(R*cos((2*Pi)*(i+1)/n),R*sin((2*Pi)*(i+1)/n),-h);glVertex3f(0,0,0);}glEnd();//绘制侧面glBegin(GL_QUADS);inti=0;for(inti=0;i=n;i++){glNormal3f(R*cos((2*Pi)*i/n),R*sin((2*Pi)*i/n),0);//画点的顺序v(n,0),(n,h),(n+1,h),(n+1,0)glVertex3f(R*cos((2*Pi)*i/n),R*sin((2*Pi)*i/n),-h);glVertex3f(R*cos((2*Pi)*i/n),R*sin((2*Pi)*i/n),h);glVertex3f(R*cos((2*Pi)*(i+1)/n),R*sin((2*Pi)*(i+1)/n),h);glVertex3f(R*cos((2*Pi)*(i+1)/n),R*sin((2*Pi)*(i+1)/n),-h);}glEnd();}2)在MeshViewer.cpp文件myGlutDisplay函数的相应位置,添加绘制圆锥的代码voidDrawCone(){//绘制圆锥floath=2.0f;//定义圆锥的高//绘制下面的圆glBegin(GL_TRIANGLES);glNormal3f(0.0f,0.0f,-1.0f);//确定法向for(inti=0;i=n;i++){//点的顺序(n,0),(n+1,0),(0,0)glVertex3f(R*cos((2*Pi)*i/n),R*sin((2*Pi)*i/n),0);glVertex3f(R*cos((2*Pi)*(i+1)/n),R*sin((2*Pi)*(i+1)/n),0);glVertex3f(0,0,0);}glEnd();//绘制圆锥的侧面glBegin(GL_TRIANGLES);inti=0;for(inti=0;i=n;i++){//计算圆锥面的法向量Vector3v1(R*cos((2*Pi)*i/n),R*sin((2*Pi)*i/n),0);Vector3v2(0,0,h);Vector3v3(R*cos((2*Pi)*(i+1)/n),R*sin((2*Pi)*(i+1)/n),0);Vector3vnormal=Cross((v3-v2),(v2-v1));glNormal3f(vnormal.fX,vnormal.fY,vnormal.fZ);//绘?制?顺3序ò(n,0),(0,h),(n+1,0)glVertex3f(R*cos((2*Pi)*i/n),R*sin((2*Pi)*i/n),0);glVertex3f(0,0,h);glVertex3f(R*cos((2*Pi)*(i+1)/n),R*sin((2*Pi)*(i+1)/n),0);}glEnd();}3)从.obj文件中读取顶点数据和面数据:实现方法CObj::ReadObjFile();boolCObj::ReadObjFile(constchar*pcszFileName){//读取模型文件FILE*fpFile=fopen(pcszFileName,r);//以只读方式打开文件if(fpFile==NULL){returnfalse;}m_pts.clear();m_faces.clear();//将模型文件中的点和面数据分别存入m_pts和ím_faces中constintnLineLenth=256;charszLine[nLineLenth];Pointpt;Facef;while(fgets(szLine,nLineLenth,fpFile)){std::stringstreamlineStream(szLine);charszType[10];lineStreamszType;if(szType[0]=='v'&&szType[1]=='\0')//读入顶点{lineStreampt.pos.fXpt.pos.fYpt.pos.fZ;m_pts.push_back(pt);}elseif(szType[0]=='f'&&szType[1]=='\0')//读入面{lineStreamf.pts[0]f.pts[1]f.pts[2];f.pts[0]--;f.pts[1]--;f.pts[2]--;m_faces.push_back(f);}}fclose(fpFile);UnifyModel();//
本文标题:97计算机图形学实验报告
链接地址:https://www.777doc.com/doc-4170850 .html