您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 计算机图形学课程设计报告
课程设计报告题目旋转四面体系(部)土木工程系专业地理信息系统班级地信081学生姓名刘自龙学号0807161148月30日至9月3日共1周指导教师(签字)系主任(签字)2010年8月27日目录摘要本文主要描述了计算机图形学中,运用C++和OpenGL来实现的绘制一个实体四面体。其中简单的用glutTimerFunc,glutSpecialFunc等函数实现了用光标键控制其旋转和用键盘上的F1、F2键实现自动旋转功能,并加设两个光源,一个为点光源,一个为聚光源。关键字:旋转球体OpenGLglutTimerFuncglutMouseFuncglutMotionFunc(1)设计内容运用C/C++、OpenGL实现。绘制四面体,并用光标键、鼠标控制其旋转或自动旋转。实现添加光源、纹理等真实感图形绘制的功能。界面友好,源程序代码清晰有层次。(2)将OPENGL中的glut中的文件进行配置(3)打开C++开发软件首先打开C++,选择新建工程当中的,然后选择存储路径进行备份,之后选择,最后进入编写程序界面。二:需求分析绘制四面体,明确绘制四面体的函数体是glutWireTetrahedron();(绘制线框四面体)glutSolidTetrahedron();(绘制实体四面体),键盘控制自动旋转的开始和停止,添加一个BOOR变量。其他功能实现需编程实现三:详细设计初始化:首先定义定态变量设置菜单项的默认参数是1,即线框四面体(下文介绍),另外设置默认绕X轴,Y轴的旋转参数然后进行光源初始化,设置背景颜色等代码如下:voidInitial(void){glClearColor(0.0f,1.0f,1.0f,1.0f);glColor3f(0.0f,0.0f,0.0f);GLfloatmat_ambient[]={0.2f,0.2f,0.2f,1.0f};GLfloatmat_diffuse[]={0.8f,0.8f,0.8f,1.0f};GLfloatmat_specular[]={1.0f,1.0f,1.0f,1.0f};GLfloatmat_shininess[]={50.0f};GLfloatlight0_diffuse[]={0.0f,0.0f,1.0f,1.0f};GLfloatlight0_position[]={1.0f,1.0f,1.0f,0.0f};GLfloatlight1_ambient[]={0.2f,0.2f,0.2f,1.0f};GLfloatlight1_diffuse[]={1.0f,0.0f,0.0f,1.0f};GLfloatlight1_specular[]={1.0f,0.6f,0.6f,1.0f};GLfloatlight1_position[]={-3.0f,-3.0f,3.0f,1.0f};GLfloatspot_direction[]={1.0f,1.0f,-1.0f};//定义材质属性glMaterialfv(GL_FRONT,GL_AMBIENT,mat_ambient);//指定材质的环境反射光反射系数glMaterialfv(GL_FRONT,GL_DIFFUSE,mat_diffuse);//指定材质的漫反射光反射系数glMaterialfv(GL_FRONT,GL_SPECULAR,mat_specular);//指定材质的镜面反射光反射系数glMaterialfv(GL_FRONT,GL_SHININESS,mat_shininess);//指定材质的镜面反射指数值//light0为漫反射的蓝色点光源glLightfv(GL_LIGHT0,GL_DIFFUSE,light0_diffuse);//指定漫反射光成分glLightfv(GL_LIGHT0,GL_POSITION,light0_position);//指定光源的位置//light1为红色聚光光源glLightfv(GL_LIGHT1,GL_AMBIENT,light1_ambient);//指定环境光成分glLightfv(GL_LIGHT1,GL_DIFFUSE,light1_diffuse);//指定漫反射光成分glLightfv(GL_LIGHT1,GL_SPECULAR,light1_specular);//指定镜面光成分glLightfv(GL_LIGHT1,GL_POSITION,light1_position);//指定光源位置glLightf(GL_LIGHT1,GL_SPOT_CUTOFF,30.0);//指定聚光截止角glLightfv(GL_LIGHT1,GL_SPOT_DIRECTION,spot_direction);//指定聚光灯的方向glEnable(GL_LIGHTING);//启用光源glEnable(GL_LIGHT0);//启用光源glEnable(GL_LIGHT1);//启用光源}设置坐标系参数:运用ChangeSize()函数进行设置代码如下:voidChangeSize(intw,inth){glViewport(0,0,w,h);glMatrixMode(GL_PROJECTION);glLoadIdentity();gluOrtho2D(-1.5f,1.5f,-1.5f,1.5f);}绘制正四面体:实体四面体代码是。添加菜单项:菜单函数编写绘制实体四面体glutSolidTetrahedron();编写Display函数,运行时执行该函数voidDisplay(void){glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);glMatrixMode(GL_MODELVIEW);//指定设置模型视图变换参数glLoadIdentity();//消除以前的变换glRotatef(xRot,1.0f,0.0f,0.0f);//绕x轴旋转图形glRotatef(yRot,0.0f,1.0f,0.0f);//绕y轴旋转图形glutSolidTetrahedron();//绘制实体正四面体glPushMatrix();//保存当前的模型视图矩阵glFlush();}键盘F1,F2实现自动旋转的开始和停止:光标键控制旋转:当程序运行时,四面体为静止的,当按下F1键后,四面体开始自动旋转,当按下F2键后四面体停止自动旋转,变为静止状态。在程序开始时先定义一个布尔变量控制自动旋转的开始和停止:函数的作用下进行有时间间隔的自动旋转另外当按下键盘的上下左右键时,图形就会旋转,否则不旋转,函数代码如下:booltm=false;//定义一个布尔函数,实现自动旋转的开始和停止再顶义一个Timer函数,实现四面体按每100毫秒转动一次voidTimerFunc(intvalue){glutPostRedisplay();xRot-=5.0f;yRot+=5.0f;glutPostRedisplay();//窗口执行重绘操作if(tm)glutTimerFunc(100,TimerFunc,1);}以下的代码就是键盘光标和自动旋转的代码:voidSpecialKeys(intkey,intx,inty){//光标键控制图形的选转if(key==GLUT_KEY_UP)xRot-=5.0f;if(key==GLUT_KEY_DOWN)xRot+=5.0f;if(key==GLUT_KEY_LEFT)yRot-=5.0f;if(key==GLUT_KEY_RIGHT)yRot+=5.0f;if(xRot355.0f)xRot=0.0f;if(xRot-1.0f)xRot=355.0f;if(yRot356.0f)yRot=0.0f;if(yRot-1.0f)yRot=355.0f;switch(key){caseGLUT_KEY_F1://按F1键实现自动旋转tm=true;glutTimerFunc(100,TimerFunc,1);//指定定时器回调函数break;caseGLUT_KEY_F2://按F2键停止自动旋转tm=false;}glutPostRedisplay();//窗口执行重绘操作}Main函数的调用编写:当对图形的绘制,功能的代码编写完之后,然后进行最后的main函数的编写,调用所有编写的函数即可完成编写工作,代码如下:intmain(intargc,char*argv[]){glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);//窗口使用RGB颜色和单缓存glutInitWindowSize(400,400);glutInitWindowPosition(100,100);glutCreateWindow(OpenGL四面体绘制函数示例,多光源四面体);glutDisplayFunc(Display);glutReshapeFunc(ChangeSize);glutSpecialFunc(SpecialKeys);Initial();glutMainLoop();return0;}编写到现在已经完成,接下来进行程序的调试,运行阶段系统测试:最后根据题目要求对系统进行调试运行实体四面体运行结果如下:总结:经过不断的对系统进行修补,测试,图形所需要的基本功能已经基本实现,已经达到预期所需要的结果,能够假设光源,用关标键控制图形的旋转,按下F1、F2键实现自动旋转的开始和停止等功能,但是纹理功能没有实现,以后注意参考资料,达到此项功能。参考资料《计算机图形学基础》(第二版)陆枫电子工业出版社《数据结构》严蔚敏高等教育出版社
本文标题:计算机图形学课程设计报告
链接地址:https://www.777doc.com/doc-2098424 .html