当前位置:文档之家› C程序设计大作业 openGL

C程序设计大作业 openGL

实用标准作业名称:可爱的玩偶学院:电子信息学院班级:学号:姓名:团队组成:西北工业大学2019年12月12日请填写以下十项内容,将表格按页对齐(插入空行),勿删除任何部分。

1、问题与背景(描述程序所要解决的问题或应用背景)2、开发工具(列出所使用的开发工具和第3方开发库)3、主要功能(详细说明程序的功能)4、设计内容(详细描述解决问题的原理和方法、算法、数据结构等)5、程序文件与工程名称(标出程序中所有文件名、工程名称及其说明)6、函数模块(程序中各个函数的原型声明及其说明)7、使用说明(运行程序的小型说明书)8、程序开发总结(简要叙述编写本作业的收获与思考)9、运行截图(附上程序运行的截图画面,至少有1幅,截图越翔实得分越Windows中抓取当前活动窗口:Alt + Print Screen,抓取全屏:Print Screen。

或者使用HyperSnap等软件(百度搜索)。

10、源程序(附上程序源代码,若是多个文件,标出文件名)#include "stdio.h"#ifdef __APPLE__#include <GLUT/glut.h>#else#include <GL/glut.h>#endif#include <stdlib.h>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, height);glMatrixMode(GL_PROJECTION);glLoadIdentity();glFrustum(-ar, ar, -1.0, 1.0, 2.0, 100.0);glMatrixMode(GL_MODELVIEW);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,1,0,0);//绕x轴转动,角度60,不动点原点glRotated(a,0,0,1);//绕z轴旋转,每次调用display时角度a的值都增加了0.08,实现了旋转。

glutSolidSphere(1,slices,stacks);//画圆球半径是1,经度数,纬度数分别为16glPopMatrix();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轴旋转,每次调用display时角度a的值都增加了0.08,实现了旋转。

glutSolidSphere(0.15,slices,stacks);//画圆球半径是1,经度数,纬度数分别为16glPopMatrix();//绘制一个实心圆锥体,默认原点在屏幕中心与照相机重合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轴旋转,每次调用display时角度a的值都增加了0.08,实现了旋转。

glutSolidSphere(0.15,slices,stacks);//画圆球半径是1,经度数,纬度数分别为16glPopMatrix();//绘制一个实心圆锥体,默认原点在屏幕中心与照相机重合glColor3d(1,1,0);//画图的颜色为红蓝色//绘制一个实心圆锥体,默认原点在屏幕中心与照相机重合glPushMatrix();glTranslated(0,0,-2.12);//相对照相机将对象向上移动1.6,向照相机前方移动6 glRotated(60,1,0,0);//绕x轴转动,角度60glRotated(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键的ASCII值为27case 'q':exit(0);break;case '+':slices++;stacks++;break;case '-':if (slices>3 && stacks>3){slices--;stacks--;}break;}glutPostRedisplay();//标记当前窗口需要重新绘制}static void idle(void)//空闲回调函数{glutPostRedisplay();//标记当前窗口需要重新绘制}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.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 main(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(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);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;}。

相关主题