2014年6月14日 星期六

week16

#include <GL/glut.h>
#include <math.h>
#include <stdlib.h>
float eyeX=0.1, eyeY=1.4, eyeZ=-0.5, objX=0, objY=0, objZ=0, upX=0, upY=0, upZ=1;
void timer(int t)
{
 glutTimerFunc(30, timer, t+1);
 eyeX=cos(t/18.0); eyeZ=sin(t/18.0);
 eyeY-=0.01;
 if(t%2==0) glClearColor((rand()%255)/255.0,(rand()%255)/255.0,(rand()%255)/255.0,0);
 glutPostRedisplay();
}
void display()
{
 glEnable(GL_DEPTH_TEST);
 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
 glPushMatrix();
  glutWireSphere(0.2,30,30);
 glPopMatrix();
  glutSwapBuffers();
 
 gluLookAt(eyeX,eyeY,eyeZ, objX,objY,objZ, upX,upY,upZ);
}
void keyboard(unsigned char key, int x, int y)
{
 if(key==' ') eyeX+=0.02;
 if(key=='o')
 {
  glMatrixMode(GL_PROJECTION);
  glLoadIdentity();
  glOrtho(-2, 2, -2, 2, -2, 2);
  glMatrixMode(GL_MODELVIEW);
 }
 else if(key=='c')
 {
  glutTimerFunc(0 , timer, 0);
 }
 else if(key=='b')
 {
 }
 glutPostRedisplay();
}
void myLight()
{
 const GLfloat light_position[] = { 2.0f, 5.0f, -5.0f, 0.0f };
 glEnable(GL_LIGHT0);
 glEnable(GL_NORMALIZE);
 glEnable(GL_COLOR_MATERIAL);
 glEnable(GL_LIGHTING);
 glLightfv(GL_LIGHT0, GL_POSITION, light_position);
}
int main()
{
 glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
 glutCreateWindow("week16");
 glutDisplayFunc(display);
 glutKeyboardFunc(keyboard);
 myLight();

 glutMainLoop();
}