C程序设计大作业 openGL.pdf

上传人:修**** 文档编号:75981012 上传时间:2023-03-06 格式:PDF 页数:12 大小:416.58KB
返回 下载 相关 举报
C程序设计大作业 openGL.pdf_第1页
第1页 / 共12页
C程序设计大作业 openGL.pdf_第2页
第2页 / 共12页
点击查看更多>>
资源描述

《C程序设计大作业 openGL.pdf》由会员分享,可在线阅读,更多相关《C程序设计大作业 openGL.pdf(12页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、程序设计挑战式课程设计极限挑战挑战,不是为着征服自然,而是为着突破自我,超越自我作业名称:作业名称:学学院:院:班班级:级:学学号:号:姓姓名:名:团队组成:团队组成:生命有极限,思想无极限,高度有极限,境界无极限可爱的玩偶电子信息学院西北工业大学西北工业大学20222022 年年 4 4 月月 2626 日日程序设计挑战式课程设计报告请填写以下十项内容,将表格按页对齐(插入空行),勿删除任何部分。请填写以下十项内容,将表格按页对齐(插入空行),勿删除任何部分。1 1、问题与背景(描述程序所要解决的问题或应用背景)、问题与背景(描述程序所要解决的问题或应用背景)用 C 语言中的 openGL

2、库设计卡通 3D 动态图,可以应用于游戏等领域。2 2、开发工具(列出所使用的开发工具和第、开发工具(列出所使用的开发工具和第 3 3 方开发库)方开发库)Code:block16.013 3、主要功能(详细说明程序的功能)、主要功能(详细说明程序的功能)通过 C 语言,设计一个卡通 3D 动态图。运行时,可以得到动态的卡通图形。4 4、设计内容(详细描述解决问题的原理和方法、算法、数据结构等)、设计内容(详细描述解决问题的原理和方法、算法、数据结构等)1 主要数据结构的设计程序中定义的主要数据类型如下:const float ar glViewport glMatrixMode glLoad

3、Identity glFrustum glMatrixMode glLoadIdentity-2-程序设计挑战式课程设计报告2、主要函数的实现1)绘制一个实心球,默认原点在屏幕中心与照相机重合 glPushMatrix();glTranslated(0,0,-5);glRotated(90,1,0,0);glRotated(a,0,0,1);glutSolidSphere(1,slices,stacks);2)绘制一个实心圆锥体,默认原点在屏幕中心与照相机重合 glColor3d(1,1,0);3)绘制一个线框圆环 glPushMatrix();glTranslated(0,0,-6);glR

4、otated(60,0,1,0);glRotated(a,0,1,0);glutWireTorus(0.5,1.8,slices,stacks);/glutWireTorus(GLdoubleinnerRadius,GLdouble outerRadius,GLint sides,GLint rings);glPopMatrix();glutSwapBuffers();4)定义一个默认的光源的属性值,使用数组来存放光源的颜色值const GLfloat light_ambient =0.0f,0.0f,0.0f,1.0f;-3-程序设计挑战式课程设计报告const GLfloat light_

5、diffuse =1.0f,1.0f,1.0f,1.0f;const GLfloat light_specular=1.0f,1.0f,1.0f,1.0f;const GLfloat light_position=2.0f,5.0f,5.0f,0.0f;5)定义材质属性值,使用数组来存放材质的颜色值const GLfloat mat_ambient =0.7f,0.7f,0.7f,1.0f;const GLfloat mat_diffuse =0.8f,0.8f,0.8f,1.0f;const GLfloat mat_specular =1.0f,1.0f,1.0f,1.0f;const GL

6、float high_shininess=100.0f;5 5、程序文件与工程名称(标出程序中所有文件名、工程名称及其说明)、程序文件与工程名称(标出程序中所有文件名、工程名称及其说明)Sources 主程序卡通三维动态图的程序6 6、函数模块(程序中各个函数的原型声明及其说明)、函数模块(程序中各个函数的原型声明及其说明)static void display(void)glRotated 定义物体的旋转glColor3d 定义物体的颜色glutSolidSphere 定义半径与经纬度static void key(unsigned char key,int x,int y)键盘回调函数st

7、atic void idle(void)空闲回调函数7 7、使用说明(运行程序的小型说明书)、使用说明(运行程序的小型说明书)点击文件后即出现截图所示的卡通三维动态图。-4-程序设计挑战式课程设计报告8 8、程序开发总结(简要叙述编写本作业的收获与思考)、程序开发总结(简要叙述编写本作业的收获与思考)通过本程序的编写和开发,进一步的提高了自己的基本编程能力,熟悉了C 语言图形模式下的编程,深入地理解了程序中有关函数等方面的知识。通过本程序的训练,使我对 C 语言有了一个更能深刻的了解。通过这次程序开发,我对程序员有了更深刻的认识。我意识到程序员不仅要有过人的思维,还要有足够的耐心,以及合作的意

8、识、独立解决困难的意识。通过这次程序开发,我学到了很多知识,遇到了一些问题,我明白了自己有很多的不足,程序也有缺陷,但这本来就是一个不断尝试、不断完善的过程,需要自己去不断摸索、试验,有了这次的体验,以后我会在这条路上走的更远。-5-程序设计挑战式课程设计报告9、运行截图(附上程序运行的截图画面,至少有运行截图(附上程序运行的截图画面,至少有 1 1 幅,截图越翔实得分越幅,截图越翔实得分越-6-程序设计挑战式课程设计报告-7-程序设计挑战式课程设计报告Windows 中抓取当前活动窗口:Alt+Print Screen,抓取全屏:PrintScreen。或者使用 HyperSnap 等软件(

9、百度搜索)。1010、源程序(附上程序源代码,若是多个文件,标出文件名)、源程序(附上程序源代码,若是多个文件,标出文件名)#include stdio.h#ifdef _APPLE_#include#else#include#endif#include static int slices=16;static int stacks=16;/*GLUT callback Handlers*/static void resize(int width,int height)const float ar=(float)width/(float)height;glViewport(0,0,width,h

10、eight);glMatrixMode(GL_PROJECTION);glLoadIdentity();glFrustum(-ar,ar,-1.0,1.0,2.0,100.0);glMatrixMode(GL_MODELVIEW);glLoadIdentity();static void display(void)/该函数的内容课改动-8-程序设计挑战式课程设计报告 static double a=0;/定义 a 为每次旋转的角度 a=a+0.15;glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);/清除颜色缓冲区和深度缓冲区 glColor3d

11、(0,1,1);/画图的颜色为红/绘制一个实心球,默认原点在屏幕中心与照相机重合 glPushMatrix();glTranslated(0,0,-5);/x 中为 0,y 值为 0,z 为-6,z 值取负值才可以显示 glRotated(90,1,0,0);/绕 x 轴转动,角度 60,不动点原点 glRotated(a,0,0,1);/绕z轴旋转,每次调用display时角度a的值都增加了0.08,实现了旋转。glutSolidSphere(1,slices,stacks);/画圆球半径是 1,经度数,纬度数分别为 16 glPopMatrix();glColor3d(1,1,0);/画图

12、的颜色为蓝绿色 glPushMatrix();glTranslated(0.5,0.5,-3);/x 中为 0,y 值为 0,z 为-6,z 值取负值才可以显示 glRotated(60,1,0,0);/绕 x 轴转动,角度 60,不动点原点 glRotated(a,0,0,1);/绕z轴旋转,每次调用display时角度a的值都增加了0.08,实现了旋转。glutSolidSphere(0.15,slices,stacks);/画圆球半径是 1,经度数,纬度数分别为 16 glPopMatrix();/绘制一个实心圆锥体,默认原点在屏幕中心与照相机重合 glColor3d(1,1,0);/画

13、图的颜色为蓝绿色/绘制一个实心球,默认原点在屏幕中心与照相机重合 glPushMatrix();glTranslated(-0.5,0.5,-3);/x 中为 0,y 值为 0,z 为-6,z 值取负值才可以显示 glRotated(60,1,0,0);/绕 x 轴转动,角度 60,不动点原点 glRotated(a,0,0,1);/绕z轴旋转,每次调用display时角度a的值都增加了0.08,实现了旋转。glutSolidSphere(0.15,slices,stacks);/画圆球半径是 1,经度数,纬度数分别为 16 glPopMatrix();/绘制一个实心圆锥体,默认原点在屏幕中心

14、与照相机重合 glColor3d(1,1,0);/画图的颜色为红蓝色/绘制一个实心圆锥体,默认原点在屏幕中心与照相机重合 glPushMatrix();glTranslated(0,0,-2.12);/相对照相机将对象向上移动 1.6,向照相机前方移动 6 glRotated(60,1,0,0);/绕 x 轴转动,角度 60 glRotated(a,0,0,0);/绕原点轴旋转,角度 a,不动点原点 glutSolidCone(0.3,0.3,slices,stacks);/glutSolidCone(GLdoubleradius,GLdouble height,GLint slices,GL

15、int stacks)glPopMatrix();-9-程序设计挑战式课程设计报告 glColor3d(0,1,1);/画图的颜色为蓝绿色/绘制一个线框圆环 glPushMatrix();glTranslated(0,0,-6);glRotated(60,0,1,0);/绕 y 轴转动 60 度 glRotated(a,0,1,0);/绕 y 轴旋转,角度 a,不动点原点 glutWireTorus(0.5,1.8,slices,stacks);/glutWireTorus(GLdoubleinnerRadius,GLdouble outerRadius,GLint sides,GLint r

16、ings);glPopMatrix();glutSwapBuffers();static void key(unsigned char key,int x,int y)/键盘回调函数 switch(key)case 27:/Esc 键的 ASCII 值为 27 case q:exit(0);break;case+:slices+;stacks+;break;case-:if(slices3&stacks3)slices-;stacks-;break;glutPostRedisplay();/标记当前窗口需要重新绘制static void idle(void)/空闲回调函数 glutPostRe

17、display();/标记当前窗口需要重新绘制/定义一个默认的光源的属性值,使用数组来存放光源的颜色值-10-程序设计挑战式课程设计报告const GLfloat light_ambient =0.0f,0.0f,0.0f,1.0f;/光源中环境光的颜色,黑色,第四个分量 1.0 表示不透明。const GLfloat light_diffuse =1.0f,1.0f,1.0f,1.0f;/光源中漫射光的颜色,白色const GLfloat light_specular=1.0f,1.0f,1.0f,1.0f;/光源中镜面反射光的颜色const GLfloat light_position=2

18、.0f,5.0f,5.0f,0.0f;/定向光源,指定了光源的方向/定义材质属性值,使用数组来存放材质的颜色值const GLfloat mat_ambient =0.7f,0.7f,0.7f,1.0f;/材质的环境颜色const GLfloat mat_diffuse =0.8f,0.8f,0.8f,1.0f;/材质的漫射光颜色const GLfloat mat_specular =1.0f,1.0f,1.0f,1.0f;/材质镜面反射光的颜色const GLfloat high_shininess=100.0f;/材质的镜面反射指数/*Program entry point*/int ma

19、in(int argc,char*argv)glutInit(&argc,argv);glutInitWindowSize(640,480);/窗口大小 glutInitWindowPosition(10,10);/窗口位置 glutInitDisplayMode(GLUT_RGB|GLUT_DOUBLE|GLUT_DEPTH);/glutCreateWindow(GLUT Shapes);glutReshapeFunc(resize);glutDisplayFunc(display);glutKeyboardFunc(key);glutIdleFunc(idle);glClearColor(

20、1,0,2,0);/参数可以在 0、1 改动 glEnable(GL_CULL_FACE);glCullFace(GL_BACK);glEnable(GL_DEPTH_TEST);glDepthFunc(GL_LESS);glEnable(GL_LIGHT0);/启用 0 号光源 glEnable(GL_NORMALIZE);/启用自动单位化法向量 glEnable(GL_COLOR_MATERIAL);/启用材质颜色 glEnable(GL_LIGHTING);/启用光照/设置 0 号光源的特性值 glLightfv(GL_LIGHT0,GL_AMBIENT,light_ambient);-

21、11-程序设计挑战式课程设计报告 glLightfv(GL_LIGHT0,GL_DIFFUSE,light_diffuse);glLightfv(GL_LIGHT0,GL_SPECULAR,light_specular);glLightfv(GL_LIGHT0,GL_POSITION,light_position);/设置材质的特性值,本题只设置了物体前面的材质值 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,high_shininess);glutMainLoop();return EXIT_SUCCESS;-12-

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 管理文献 > 企业管理

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁