openGL 六边形

#include "stdafx.h"
#include<GL/glut.h>
#include<math.h>
#include<stdlib.h>


const double TWO_PI = 6.2831853;

/*Initial display-window size*/
GLsizei winWidth = 400, winHeight = 400;
GLuint regHex;

class screenPt
{
private:
    GLint x, y;
public:
    /*Default Constructor:initalizes coordinate position to(0,0).*/
    screenPt() { x = y = 0; }
    void setGoords(GLint xGoord, GLint yGoord) { x = xGoord; y = yGoord; }
    GLint getx()const { return x; }
    GLint gety()const { return y; }
};

static void init(void)
{
    screenPt hexVertex, circCtr;
    GLdouble theta;
    GLint k;
    /*Set circle center coordinates.*/
    circCtr.setGoords(winWidth / 2, winHeight / 2);

    glClearColor(1.0, 1.0, 1.0, 0.0);//Display-window color=white.

                                     /*Set up a display list for a red regular hexagon.
                                     *Vertice for the hexagon are six equally spaced
                                     *points around the circumference of a circle.
                                     */
    regHex = glGenLists(1);//Get an identifier for the display list.
    glNewList(regHex, GL_COMPILE);
    glColor3f(1.0, 0.0, 0.0);//Set fill color for hexagon to red.
    glBegin(GL_POLYGON);
    for (k = 0; k < 6; k++)
    {
        theta = TWO_PI*k / 6.0;
        hexVertex.setGoords(circCtr.getx() + 150 * cos(theta),
            circCtr.gety() + 150 * sin(theta));
        glVertex2i(hexVertex.getx(), hexVertex.gety());
    }
    glEnd();
    glEndList();
}
void regHexagon(void)
{
    glClear(GL_COLOR_BUFFER_BIT);
        glCallList(regHex);
    glFlush();
}
void winReshapeFcn(GLint newWidth, GLint newHeight)
{
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluOrtho2D(0.0, (GLdouble)newWidth, 0.0, (GLdouble)newHeight);
    glClear(GL_COLOR_BUFFER_BIT);

}
void main(int argc, char** argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
    glutInitWindowPosition(100, 100);
    glutInitWindowSize(winWidth, winHeight);
    glutCreateWindow("Reshape-Function&Display-ListExample");

    init();
    glutDisplayFunc(regHexagon);
    glutReshapeFunc(winReshapeFcn);
    glutMainLoop();
}

 

 

posted @ 2019-07-30 11:22  光之继承人  阅读(583)  评论(0编辑  收藏  举报