资源预览内容
第1页 / 共7页
第2页 / 共7页
第3页 / 共7页
第4页 / 共7页
第5页 / 共7页
第6页 / 共7页
第7页 / 共7页
亲,该文档总共7页全部预览完了,如果喜欢就下载吧!
资源描述
#include stdio.h#ifdef _APPLE_#include #else#include #endif#include #include #include #include #include static double a=0;static double b=0.2;static double t=0;static double t1=0;static double v=0;static double i=0;static double m=0;static double n=0;static double p,q,r,r1=1;static void resize(int width,int height)/重绘回调函数 const float ar=(float)width/(float)height; glViewport(0,0,width,height);/利用函数glViewport定义视区 glMatrixMode(GL_PROJECTION);/投影矩阵 glLoadIdentity();/ 重置坐标系统,使投影变换复位 glFrustum(-ar,ar,-1.0,1.0,2.0,100.0);/利用函数glFrustum定义修剪区 glMatrixMode(GL_MODELVIEW); glLoadIdentity();static void display(void)/显示回调 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);/清除颜色缓冲区和深度缓冲区 t=t+t1*0.0001; glColor3d(1,0.6,0.6);/画图颜色灰红/绘制一个实心球,默认原点在屏幕中心与照相机重合 glPushMatrix(); glTranslated(-3+0.5*cos(a),-0.6+0.5*sin(a),-5); glRotated(0,0,0,0); glutSolidSphere(b,16,16); glPopMatrix(); glColor3d(1,0,0);/画图颜色红/绘制一个实心球,默认原点在屏幕中心与照相机重合 glPushMatrix(); glTranslated(-3+t*cos(a)*v*t1,-0.6+(t*sin(a)*v-45*t*t)*t1,-5); glRotated(0,0,0,0); glutSolidSphere(0.2*r1,16,16); glPopMatrix(); glColor3d(1,1,1);/画图颜色灰/绘制一个线框圆环 glPushMatrix(); glTranslated(m+2.3,n-0.6,-5); glRotated(100,1,0,0); glRotated(7.5,0,1,0); glutWireTorus(0.1*r1,0.6,16,16); glPopMatrix(); if(pow(3-t*cos(a)*v*t1+m+2.3,2)+pow(0.6-(t*sin(a)*v-45*t*t)*t1+n-0.6,2)0.024) t=t-t1*0.0001; r1=3.5; else r1=1; for(p=-3.5,q=0.5;p3.6;p=p+0.5) if(pow(3-t*cos(a)*v*t1+p,2)+pow(0.6-(t*sin(a)*v-45*t*t)*t1+q,2)0.2)r=0.4; else r=0.05; glColor3d(0,0,0);/画图颜色黑 /绘制一个线框圆环 glPushMatrix(); glTranslated(p,q,-5); glRotated(t*5000,0,1,0); glutWireTorus(r,0.15,16,16); glPopMatrix(); for(p=-3.5,q=0;p3.6;p=p+0.5) if(pow(3-t*cos(a)*v*t1+p,2)+pow(0.6-(t*sin(a)*v-45*t*t)*t1+q,2)0.2)r=0.4; else r=0.05; glColor3d(0,0,0);/画图颜色黑 /绘制一个线框圆环 glPushMatrix(); glTranslated(p,q,-5); glRotated(t*5000,0,1,0); glutWireTorus(r,0.15,16,16); glPopMatrix(); for(p=-3.5,q=1;p3.6;p=p+0.5) if(pow(3-t*cos(a)*v*t1+p,2)+pow(0.6-(t*sin(a)*v-45*t*t)*t1+q,2)0.2)r=0.4; else r=0.05; glColor3d(0,0,0);/画图颜色黑 /绘制一个线框圆环 glPushMatrix(); glTranslated(p,q,-5); glRotated(t*5000,0,1,0); glutWireTorus(r,0.15,16,16); glPopMatrix(); glutSwapBuffers();/交换缓冲区static void key(unsigned char key, int x, int y)/键盘回调函数 switch(key) case 27:/Esc键的ASCII码为27 case 13:/回车的ASCII码为13 exit(0); break; case 43:/加号的ASCII码为43 if (a0) a=a-0.1; break; case 49:/1的ASCII码为49 v=4; break; case 50:/2的ASCII码为50 v=8; break; case 51:/3的ASCII码为51 v=12; break; case 52:/4的ASCII码为52 v=16; break; case 53:/5的ASCII码为53 v=20; break; case 54:/6的ASCII码为54 v=24; break; case 55:/7的ASCII码为55 v=28; break; case 56:/8的ASCII码为56 v=32; break; case 57:/9的ASCII码为57 v=36; break; case 32:/空格的ASCII码为32 if(t0.1) t1=1; b=0.001; else b=0.2; v=0; t1=0; t=0; m=0; n=0; break; case 97:/a的ASCII码为97 m=m-0.2; break; case 119:/w的ASCII码为119 n=n+0.2; break; case 100:/d的ASCII码为100 m=m+0.2; break; case 115:/s的ASCII码为115 n=n-0.2; break; glutPostRedisplay();/标记当前窗口需要重新绘制static void idle(void)/空闲回调函数 glutPostRedisplay();/标记当前窗口需要重新绘制/定义一个默认的光源的属性值,使用数组来存放光源的颜色值const GLfloat light_ambient = 0.0f, 0.0f, 0.0f, 1.0f ;/光源中环境光的颜色,黑色,第四个分量1.0表示
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号