个人信息
nameless
文章分类
访客
新浪博客推荐文章
内容
  •  
    2007-10-31 21:00:41

    /************** 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;
    }

    效果图:

数据加载中...