#include "stdafx.h"
#include
#include
#include
GLfloat red = 1.0, green = 1.0, blue = 1.0, angle = 0.0;
GLdouble y = 0.0, x = 0.0;
int space = 0, enter = 0;;
void SetupRC()
{
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
glViewport(0, 0, 400, 400);
glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0);
//glOrtho(-3.1415, 3.1415, -1.0, 1.0, -1.0, 1.0);
}
void changecolor()
{
switch (space)
{
case 1: red = 1.0; green = 0.0; blue = 0.0; break;
case 2: red = 0.0; green = 1.0; blue = 0.0; break;
case 3: red = 0.0; green = 0.0; blue = 1.0; break;
case 4: red = 1.0; green = 0.0; blue = 1.0; break;
case 5: red = 0.75; green = 0.75; blue = 0.75; break;
case 6: red = 0.6; green = 0.4; blue = 0.37; break;
case 7: red = 0.9; green = 0.04; blue = 0.7; break;
case 0: red = 1.0; green = 1.0; blue = 1.0; break;
}
}
void H()
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(red, green, blue);
//glRotatef(angle, 0.0, 1.0, 0.0);
glutWireSphere(0.2 + y, 8, 8);
//glPushMatrix();
glBegin(GL_TRIANGLE_FAN);
glVertex3f(-0.25 + (y / 2), -1.25 + (1.5*y), 0.0);
glVertex3f(0.25 - (y / 2), -1.0 + (1.5*y), 0.0);
glVertex3f(0.0, -0.5 + y, 0.0);
glEnd();
glRotatef(angle, 0.0, 1.0, 0.0);
//glPopMatrix();
angle++;
if (y != 0.5) y += 0.00001;
else exit(0);
//if (y == 0.75) angle = NULL;
glFlush();
glBegin(GL_TRIANGLE_FAN);
glVertex3f(-0.25 + (y / 2), 1.25 - (1.5*y), 0.0);
glVertex3f(0.25 - (y / 2), 1.0 - (1.5*y), 0.0);
glVertex3f(0.0, 0.5 - y, 0.0);
glEnd();
glFlush();
glBegin(GL_TRIANGLE_FAN);
glVertex3f(1.25 - (1.5*y), -0.25 + (y / 2), 0.0);
glVertex3f(1.0 - (1.5*y), 0.25 - (y / 2), 0.0);
glVertex3f(0.5 - y, 0.0, 0.0);
glEnd();
glRotatef(angle, 1.0, 0.0, 0.0);
glFlush();
glBegin(GL_TRIANGLE_FAN);
glVertex3f(-1.25 + (1.5*y), -0.25 + (y / 2), 0.0);
glVertex3f(-1.0 + (1.5*y), 0.25 - (y / 2), 0.0);
glVertex3f(-0.5 + y, 0.0, 0.0);
glEnd();
if (enter != 0) { space++; space = space % 8; changecolor(); }
glFlush();
}
void NormalKeys(unsigned char key, int x, int y)
{
if (key == 27) //按ESC退出
exit(0);
else if (key == 32)
{
enter = 0;
space++;
space = space % 8;
changecolor();
}
//else if (key == 151) glutIdleFunc(NULL);
else if (key == 13) enter = 1;
}
void SpecialKeys(int key, int x, int y)
{
if(key==GLUT_KEY_F1) glutIdleFunc(NULL);
else if (key == GLUT_KEY_F2) glutIdleFunc(H);
}
void main(int argc, char *argv)
{
int a;
glutInit(&argc, &argv);
glutInitDisplayMode(GLUT_SINGLE); //设置显示方式
glutInitWindowPosition(50, 50); //设置显示位置
glutInitWindowSize(500, 500); //设置窗口大小
glutCreateWindow("H");
SetupRC();
glutDisplayFunc(&H);
glutIdleFunc(H);
glutKeyboardFunc(NormalKeys);
glutSpecialFunc(SpecialKeys);
glutMainLoop();
}