下载此文档

计算机图形学实验报告(同名20943).doc


文档分类:IT计算机 | 页数:约13页 举报非法文档有奖
1/13
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/13 下载此文档
文档列表 文档介绍
该【计算机图形学实验报告(同名20943) 】是由【小果冻】上传分享,文档一共【13】页,该文档可以免费在线阅读,需要了解更多关于【计算机图形学实验报告(同名20943) 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。实验一3D模型的加载、渲染与三维操作学院:专业班级: 指导老师: 学号: 姓名: 完成日期: 目录一、实验目的 4二、使用的工具软件及环境 4三、实验内容 4四、实验步骤 4五、思考 13一、实验目的1、掌握在MicrosoftVisualStudio环境中使用OpenGL、GLUT和GLUI;2、了解计算机图形学固定流水线;3、了解OpenGL编程根底;4、掌握三维观察的数学表达和程序实现;5、掌握多边形网格的绘制;二、使用的工具软件及环境MicrosoftVisualStudio2024、OpenGL、Glut、Glui三、实验内容1、在VS2024中配置OpenGL环境;2、编译简单的GLUT程序;3、编译GLUI源代码,并在调试模式下执行6个例如程序;4、在给定的工程中添加绘制简单几何体的代码;5、在给定的工程中添加读取、绘制三维模型的代码;6、在给定的工程中添加旋转、平移和缩放的控制代码;四、实验步骤安装MicrosoftVisualStudio软件版本选择:MicrosoftVisualStudio2024以上版本VS2024中配置GLUT1)下载GLUT。Windows环境下的GLUT下载地址:ources/libraries/glut/)将下载的压缩包解开,将得到5个文件:、、、、。3)"%WinDir%\ProgramFiles(x86)\MicrosoftSDKs\Windows\\Include\gl\"文件夹中。4)"%WinDir%\ProgramFiles(x86)\\VC\lib\"文件夹中。5)"%WinDir%\system32"文件夹〔32位操作系统〕或者"%WinDir%\SysWOW64"文件夹〔64位操作系统〕。测试GLUT配置环境1)翻开VS2024,选择文件->新建->工程,选择Win32控制台应用程序,填入适宜的名字如OpenGLTest,然后选择确定。2)在弹出的对话框中点击下一步,然后在附加选项中选择空工程,点击完成。3)然后向该工程添加一个源代码文件,。4)〔可在公共邮箱下载〕#include<GL/>#include<gl/>#include<gl/>voidmyDisplay(){ glClear(GL_COLOR_BUFFER_BIT); glRectf(-,-,,); 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)设置必要的静态链接库列表选择“工程->属性->链接器->输入->附加包含目录〞,填写必要的静态链接库列表,如“;;〞6)编译、链接、执行该程序,生成一个黑色的窗口,中央显示一个白色的矩形,说明配置环境正确。编译GLUI库文件和例如程序在公共邮箱中下载GLUI源代码并解压到适宜的目录用VS2024翻开"glui-\src\msvc"。在“解决方案资源管理器〞中右键点击“解决方案"glui"〞项,点击批生成,勾选前四项,点击生成。在“解决方案资源管理器〞中右键点击“解决方案"glui"〞项,点击批生成,取消选择前四项,勾选其余项,点击生成。在"glui-\src\msvc\bin"目录下可见到生成的动态链接库文件以及可执行文件。在"glui-\src\msvc\lib"目录下可见到生成的静态链接库文件。将glui相关的头文件、静态链接库文件、。编译MeshViewer例如程序从公共邮箱中下载MeshViewer例如程序,试编译运行。,添加绘制圆柱的代码voidDrawCylinder(){//绘制圆柱体 floath=; //绘制上面的圆 glBegin(GL_TRIANGLES); glNormal3f(,,);//确定法向 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(,,-);//确定法向 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();},添加绘制圆锥的代码voidDrawCone(){//绘制圆锥 floath=;//定义圆锥的高 //绘制下面的圆 glBegin(GL_TRIANGLES); glNormal3f(,,-);//确定法向 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(,,); //绘?制?顺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();}:实现方法CObj::ReadObjFile();boolCObj::ReadObjFile(constchar*pcszFileName){//读取模型文件 FILE*fpFile=fopen(pcszFileName,"r");//以只读方式翻开文件 if(fpFile==NULL) { returnfalse; } (); (); //将模型文件中的点和面数据分别存入m_pts和ím_faces中 constintnLineLenth=256; charszLine[nLineLenth]; Pointpt; Facef; while(fgets(szLine,nLineLenth,fpFile)) { std::stringstreamlineStream(szLine); charszType[10]; lineStream>>szType; if(szType[0]=='v'&&szType[1]=='\0')//读入顶点 { lineStream>>>>>>; (pt); } elseif(szType[0]=='f'&&szType[1]=='\0')//读入面 { lineStream>>[0]>>[1]>>[2]; [0]--; [1]--; [2]--; (f); } } fclose(fpFile); UnifyModel();//将模型归一化 ComputeNormals();//计算法线 returntrue;}将模型归一化:实现方法CObj::UnifyModel();voidCObj::UnifyModel(){//模型归一化 Vector3vMax,vMin; vMax=vMin=m_pts[0].pos; for(inti=1;i<();++i) { =min(,m_pts[i].); =min(,m_pts[i].); =min(,m_pts[i].); =max(,m_pts[i].); =max(,m_pts[i].); =max(,m_pts[i].); } Vector3center=(vMax+vMin)*; //Calculatescaleration

计算机图形学实验报告(同名20943) 来自淘豆网www.taodocs.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数13
  • 收藏数0 收藏
  • 顶次数0
  • 上传人小果冻
  • 文件大小115 KB
  • 时间2024-04-25