[OpenGL]课后案例01:Sierpinski镂垫程序

//A.1  Sierpinski镂垫程序
/* two-dimensional Sierpinski gasket             */
/* generated using randomly selected vertices  */
/* and bisection                                    */
#include <GL/glut.h>
#include <Windows.h> //课本没有,但是不加的话rand()报错,不知为何
/*you may have to change the include to<glut.h> or
elsewhere depending on where it is stored on your system */
/* glut.h usually has included for gl.h and glu.h */
void myinit(void)
{
    /* attributes */
    glClearColor(1.0, 1.0, 1.0, 1.0); /* white background */
    glColor3f(1.0, 0.0, 0.0); /* draw in red */
    /* set up viewing */
    /* 50.0 × 50.0 camera coordinate window with origin lower left */
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluOrtho2D(0.0, 50.0, 0.0, 50.0);
    glMatrixMode(GL_MODELVIEW);
}
void display(void)
{
    /* A triangle */
    GLfloat vertices[3][2]={{0.0,0.0},{25.0,50.0},{50.0,0.0}};

    int i, j, k;
    int rand();       /* standard random number generator */
    GLfloat p[2] ={7.5,5.0};  /* an arbitrary initial point inside
                              traingle */
    glClear(GL_COLOR_BUFFER_BIT);  /* clear the window */
    glBegin(GL_POINTS);
    /* compute and plots 5000 new points */
    for( k=0; k<5000; k++)
    {
        j=rand()%3; /* pick a vertex at random */
        /* Compute point halfway between selected vertex and old point */
        p[0] = (p[0]+vertices[j][0])/2.0;
        p[1] = (p[1]+vertices[j][1])/2.0;

        /* plot new point */
        glVertex2fv(p);

    }
    glEnd();
    glFlush(); /* clear buffers */
}
void main(int argc, char** argv)
{
    /* Standard GLUT initialization */
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); /* default, not
                                                 needed */
    glutInitWindowSize(500,500); /* 500 × 500 pixel window */
    glutInitWindowPosition(0,0); /* place window top left on display
                                 */
    glutCreateWindow("Sierpinski Gasket"); /* window title */
    glutDisplayFunc(display);
    /* display callback invoked when window opened */
    myinit(); /* set attributes */
    glutMainLoop(); /* enter event loop */
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值