文档库 最新最全的文档下载
当前位置:文档库 › GRAPH

GRAPH


#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();


}

相关文档