/************** Snow.cpp **************/
/*
Copyright By
Nameless
*/
/*
All Right
Reserved
*/
/*
NUDT
*/
/*
Oct,27,2007
*/
/**************************************/
#include <GL/glut.h>
#include <math.h>
#define DEEP 4
#define PI 3.1415926
#define RADIUS 40
#define OX 250
#define OY 175
void init()
{
glClearColor(0.0, 0.0, 0.0, 0.0);
glMatrixMode(GL_PROJECTION);
gluOrtho2D(0.0,500.0,0.0,350.0);
}
void DrawSnow(GLint deep,GLint r,GLint
theata,GLint x,GLint y)
{
if (deep>=DEEP)
return;
int xi=r*cos(theata*PI/180);
int yi=r*sin(theata*PI/180);
glBegin(GL_LINES);
glVertex2i(x,y);
glVertex2i(x+xi,y+yi);
glEnd();
glBegin(GL_LINES);
glVertex2i(OX+OX-x,OY+OY-y);
glVertex2i(OX+OX-x-xi,OY+OY-y-yi);
glEnd();
DrawSnow(deep+1,r/2,theata-45,x+xi/2,y+yi/2);
DrawSnow(deep+1,r,theata,x+xi/2,y+yi/2);
DrawSnow(deep+1,r/2,theata+45,x+xi/2,y+yi/2);
return;
}
void Snow()
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0,1.0,1.0);
DrawSnow(0,RADIUS,90,OX,OY);
DrawSnow(0,RADIUS,30,OX,OY);
DrawSnow(0,RADIUS,-30,OX,OY);
glFlush();
}
int main(int argc, char* argv[])
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
glutInitWindowPosition(50,100);
glutInitWindowSize(400,300);
glutCreateWindow("递归雪花");
init();
glutDisplayFunc(Snow);
glutMainLoop();
return 0;
}
效果图:
