openGL画五角星

开发环境是codeblocks+glut,其中glut库的作用是封装windows程序的消息循环等标准windows程序结构,屏蔽与openGL开发无关的复杂性(在后面的代码可以看到,在程序模版里面放置一些固定的封装好的函数调用就可以了),使用户专注于openGL本身。这个开发环境既轻量又容易配置,只要配置好环境,openGL还是很容易上手的。具体的配置可参考:

http://www.cnblogs.com/lycheng/archive/2011/09/10/2173419.html

下面分别使用GL_LINE_LOOP和GL_LINES两种模式绘制五角星。

效果图如下:

 

在本文开头环境下的完整代码:

#include<windows.h>
#include<GL/glut.h>
#include<cmath>

const GLfloat R=0.5f;
const GLfloat Pi=3.1415926536f;

static void myDisplay(void)
{
    glClear(GL_COLOR_BUFFER_BIT);

    glBegin(GL_LINE_LOOP);
    for(int i=0;i<360;i++)
    {
        glVertex2f(R*cos(i/360.0*2.0*Pi)-0.5,R*sin(i/360.0*2.0*Pi)+0.5);
    }

    float aa=cos(54.0/360.0*2*Pi);
    float bb=aa*tan(36.0/360.0*2*Pi);
    float cc=sin(54.0/360.0*2*Pi)-bb;

    for(int i=0;i<360;i+=72)
    {
        glVertex2f(R*cos(i/360.0*2.0*Pi)-0.5,R*sin(i/360.0*2.0*Pi)+0.5);
        glVertex2f(cc*R*cos((i+36)/360.0*2.0*Pi)-0.5,cc*R*sin((i+36)/360.0*2.0*Pi)+0.5);
    }
    glEnd();

    glBegin(GL_LINES);
    float pta[5],ptb[5];
    for(int i=0;i<5;i+=1)
    {
        pta[i]=R*cos(i/5.0*2.0*Pi);
        ptb[i]=R*sin(i/5.0*2.0*Pi);
    }
    glVertex2f(pta[0]+0.5,ptb[0]-0.5);
    glVertex2f(pta[2]+0.5,ptb[2]-0.5);
    glVertex2f(pta[0]+0.5,ptb[0]-0.5);
    glVertex2f(pta[3]+0.5,ptb[3]-0.5);
    glVertex2f(pta[1]+0.5,ptb[1]-0.5);
    glVertex2f(pta[3]+0.5,ptb[3]-0.5);
    glVertex2f(pta[1]+0.5,ptb[1]-0.5);
    glVertex2f(pta[4]+0.5,ptb[4]-0.5);
    glVertex2f(pta[2]+0.5,ptb[2]-0.5);
    glVertex2f(pta[4]+0.5,ptb[4]-0.5);

    glEnd();

    glFlush();
}

int main(int argc, char *argv[])
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
    glutInitWindowPosition(100,100);
    glutInitWindowSize(400,400);
    glutCreateWindow("GLUT Shapes");

    glutDisplayFunc(&myDisplay);

    glutMainLoop();

    return EXIT_SUCCESS;
}

 

 

posted @ 2013-02-27 11:45  eternalwt  阅读(3174)  评论(0编辑  收藏  举报