ImageVerifierCode 换一换
格式:DOCX , 页数:12 ,大小:51.26KB ,
资源ID:9642822      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-9642822.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(C程序设计大作业openGL.docx)为本站会员(b****0)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

C程序设计大作业openGL.docx

1、C程序设计大作业openGLC程序设计大作业-openGL作业名称:可爱的玩偶学 院:电子信息学院班 级:学 号:姓 名:团队组成:西北工业大学2020年12月31日请填写以下十项内容,将表格按页对齐(插入空行),勿删除任何部分。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(

3、1,1,0);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 ligh

4、t_ambient = 0.0f, 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_diffus

5、e = 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 ;5、程序文件与工程名称(标出程序中所有文件名、工程名称及其说明)Sources主程序 卡通三维动态图的程序6、函数模块(程序中各个函数的原型声明及其说明)static void display(void)glRotated 定义物体的旋转glColor3d 定义物体的颜色glutSolidSphere 定义半径与经纬度static void key(uns

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

7、很多知识,遇到了一些问题,我明白了自己有很多的不足,程序也有缺陷,但这本来就是一个不断尝试、不断完善的过程,需要自己去不断摸索、试验,有了这次的体验,以后我会在这条路上走的更远。9、运行截图(附上程序运行的截图画面,至少有1幅,截图越翔实得分越Windows中抓取当前活动窗口:Alt + Print Screen,抓取全屏:Print Screen。或者使用HyperSnap等软件(XX搜索)。10、源程序(附上程序源代码,若是多个文件,标出文件名)#include stdio.h#ifdef _APPLE_#include #else#include #endif#include stati

8、c 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, height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glFrustum(-ar, ar, -1.0, 1.0, 2.0, 100.0); glMatrixMode(GL_M

9、ODELVIEW); glLoadIdentity() ;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

10、,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);/画图的颜色为蓝绿色 glPushMatrix(); glTranslated(0.5,0.5,-3); /x中为0,y值为0,z为-6,z值取负值才可以显示 glRotated(60,1,0,0);/绕x轴转动,角度60,不动点原点 glRotated(

11、a,0,0,1);/绕z轴旋转,每次调用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轴转动,角度6

12、0,不动点原点 glRotated(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,

13、1,0,0);/绕x轴转动,角度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

14、(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键的ASCII值为27 case q: exit(0); break

15、; case +: slices+; stacks+; break; case -: if (slices3 & stacks3) slices-; stacks-; break; glutPostRedisplay();/标记当前窗口需要重新绘制static void idle(void)/空闲回调函数 glutPostRedisplay();/标记当前窗口需要重新绘制/定义一个默认的光源的属性值,使用数组来存放光源的颜色值const GLfloat light_ambient = 0.0f, 0.0f, 0.0f, 1.0f ;/光源中环境光的颜色,黑色,第四个分量1.0表示不透明。con

16、st 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 ;/定向光源,指定了光源的方向/定义材质属性值,使用数组来存放材质的颜色值const GLfloat mat_ambient = 0.7f, 0.7f, 0.7f, 1.0f ; /材质的环境颜色const GLfloat mat

17、_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 main(int argc, char *argv) glutInit(&argc, argv); glutInitWindowSize(640,480);/窗口大小 glutInitWindowPosition(10,10)

18、;/窗口位置 glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);/ glutCreateWindow(GLUT Shapes); glutReshapeFunc(resize); glutDisplayFunc(display); glutKeyboardFunc(key); glutIdleFunc(idle); glClearColor(1,0,2,0);/参数可以在0、1改动 glEnable(GL_CULL_FACE); glCullFace(GL_BACK); glEnable(GL_DEPTH_TEST); glDep

19、thFunc(GL_LESS); glEnable(GL_LIGHT0);/启用0号光源 glEnable(GL_NORMALIZE);/ 启用自动单位化法向量 glEnable(GL_COLOR_MATERIAL);/启用材质颜色 glEnable(GL_LIGHTING);/启用光照/设置0号光源的特性值 glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient); glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse); glLightfv(GL_LIGHT0, GL_SPECULAR, light_specul

20、ar); 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;

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2