《c程序设计大作业-opengl》由会员分享,可在线阅读,更多相关《c程序设计大作业-opengl(11页珍藏版)》请在金锄头文库上搜索。
1、程序设计挑战式课程设计报告作业名称:可爱的玩偶学 院:电子信息学院班 级:学 号:姓 名:团队组成:西北工业大学2019年10月4日请填写以下十项内容,将表格按页对齐(插入空行),勿删除任何部分。1、问题与背景(描述程序所要解决的问题或应用背景)用C语言中的openGL库设计卡通3D动态图,可以应用于游戏等领域。2、开发工具(列出所使用的开发工具和第3方开发库)Code:block16.013、主要功能(详细说明程序的功能)通过C语言,设计一个卡通3D动态图。运行时,可以得到动态的卡通图形。4、设计内容(详细描述解决问题的原理和方法、算法、数据结构等)1 主要数据结构的设计程序中定义的主要数据
2、类型如下:const float ar glViewport glMatrixMode glLoadIdentity glFrustum glMatrixMode glLoadIdentity2、主要函数的实现 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)绘制一个线框圆环
3、 glPushMatrix(); glTranslated(0,0,-6); glRotated(60,0,1,0); glRotated(a,0,1,0); glutWireTorus(0.5,1.8,slices,stacks);/glutWireTorus(GLdouble innerRadius, GLdouble outerRadius, GLint sides, GLint rings); glPopMatrix(); glutSwapBuffers();4)定义一个默认的光源的属性值,使用数组来存放光源的颜色值const GLfloat light_ambient = 0.0f,
4、 0.0f, 0.0f, 1.0f ;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.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
5、.8f, 1.0f ; const GLfloat mat_specular = 1.0f, 1.0f, 1.0f, 1.0f ;const GLfloat high_shininess = 100.0f ;5、程序文件与工程名称(标出程序中所有文件名、工程名称及其说明)Sources主程序 卡通三维动态图的程序6、函数模块(程序中各个函数的原型声明及其说明)static void display(void)glRotated 定义物体的旋转glColor3d 定义物体的颜色glutSolidSphere 定义半径与经纬度static void key(unsigned char key, i
6、nt x, int y) 键盘回调函数static void idle(void) 空闲回调函数7、使用说明(运行程序的小型说明书)点击文件后即出现截图所示的卡通三维动态图。8、程序开发总结(简要叙述编写本作业的收获与思考)通过本程序的编写和开发,进一步的提高了自己的基本编程能力,熟悉了C语言图形模式下的编程,深入地理解了程序中有关函数等方面的知识。通过本程序的训练,使我对C语言有了一个更能深刻的了解。通过这次程序开发,我对程序员有了更深刻的认识。我意识到程序员不仅要有过人的思维,还要有足够的耐心,以及合作的意识、独立解决困难的意识。通过这次程序开发,我学到了很多知识,遇到了一些问题,我明白了
7、自己有很多的不足,程序也有缺陷,但这本来就是一个不断尝试、不断完善的过程,需要自己去不断摸索、试验,有了这次的体验,以后我会在这条路上走的更远。9、 运行截图(附上程序运行的截图画面,至少有1幅,截图越翔实得分越Windows中抓取当前活动窗口:Alt + Print Screen,抓取全屏:Print Screen。或者使用HyperSnap等软件(百度搜索)。10、源程序(附上程序源代码,若是多个文件,标出文件名)#include stdio.h#ifdef _APPLE_#include #else#include #endif#include static int slices = 1
8、6;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, height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glFrustum(-ar, ar, -1.0, 1.0, 2.0, 100.0); glMatrixMode(GL_MODELVIEW); glLoa
9、dIdentity() ;static void display(void)/该函数的内容课改动 static double a =0;/定义a为每次旋转的角度 a=a+0.15; glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);/清除颜色缓冲区和深度缓冲区 glColor3d(0,1,1);/画图的颜色为红/绘制一个实心球,默认原点在屏幕中心与照相机重合 glPushMatrix(); glTranslated(0,0,-5); /x中为0,y值为0,z为-6,z值取负值才可以显示 glRotated(90,1,0,0);/绕x轴转动,角
10、度60,不动点原点 glRotated(a,0,0,1);/绕z轴旋转,每次调用display时角度a的值都增加了0.08,实现了旋转。 glutSolidSphere(1,slices,stacks);/画圆球半径是1,经度数,纬度数分别为16 glPopMatrix(); glColor3d(1,1,0);/画图的颜色为蓝绿色 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轴旋转,
11、每次调用display时角度a的值都增加了0.08,实现了旋转。 glutSolidSphere(0.15,slices,stacks);/画圆球半径是1,经度数,纬度数分别为16 glPopMatrix();/绘制一个实心圆锥体,默认原点在屏幕中心与照相机重合 glColor3d(1,1,0);/画图的颜色为蓝绿色/绘制一个实心球,默认原点在屏幕中心与照相机重合 glPushMatrix(); glTranslated(-0.5,0.5,-3); /x中为0,y值为0,z为-6,z值取负值才可以显示 glRotated(60,1,0,0);/绕x轴转动,角度60,不动点原点 glRotate
12、d(a,0,0,1);/绕z轴旋转,每次调用display时角度a的值都增加了0.08,实现了旋转。 glutSolidSphere(0.15,slices,stacks);/画圆球半径是1,经度数,纬度数分别为16 glPopMatrix();/绘制一个实心圆锥体,默认原点在屏幕中心与照相机重合 glColor3d(1,1,0);/画图的颜色为红蓝色/绘制一个实心圆锥体,默认原点在屏幕中心与照相机重合 glPushMatrix(); glTranslated(0,0,-2.12);/相对照相机将对象向上移动1.6,向照相机前方移动6 glRotated(60,1,0,0);/绕x轴转动,角度
13、60 glRotated(a,0,0,0);/绕原点轴旋转, 角度a,不动点原点 glutSolidCone(0.3,0.3,slices,stacks);/glutSolidCone(GLdouble radius, GLdouble height, GLint slices, GLint stacks) glPopMatrix(); 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(GLdouble innerRadius, GLdouble outerRadius, GLint sides, GLint rings); glPopMatrix(); glutSwapBuffers();static void key(unsigned char key, int x, int y)/键盘回调函数 switch (key) case 27 :/Esc键的ASCI