旋转的六边形 源代码

#include<Windows.h>
#include <gl/glut.h>
#include <gl/GLu.h>
#include <gl/GL.h>
#include <math.h>
#include <iostream>

using namespace std;

const GLint screenWidth = 640;
const GLint screenHeight = 640;
const GLint xPosition = 100;
const GLint yPosition = 150;
const GLdouble PI = 3.1415926;

static GLint rotation = 0;        //0~60
static GLint size = 10;            //10~290


void myDisplay(void);
void myInit();
void setWindow(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top);
void setViewport(GLint left, GLint right, GLint botton, GLint top);
void drawhex(GLint size, GLint rotation);
void hexSwirl();

int main(int argc, char ** argv){

    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);            
    glutInitWindowSize(screenWidth,screenHeight);
    glutInitWindowPosition(xPosition,yPosition);

    glutCreateWindow("Wirl...");

    glutDisplayFunc(myDisplay);
    myInit();

    setWindow(-320,320,-320,320);
    setViewport(0,screenWidth,0,screenHeight);

    glutMainLoop();

    return 0;
}

void setWindow(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top){
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluOrtho2D(left,right,bottom,top);
}

void setViewport(GLint left, GLint right, GLint botton, GLint top){
    glViewport(left,botton,right-left,top-botton);
}


void hexSwirl(){
    //0~30共31层,0~60共60度。每次2度
    for( GLint x = 0; x <= 30; x ++){
        glBegin(GL_LINE_LOOP);
        drawhex(size,rotation);
        glEnd();
        //cout<<size<<"  "<<rotation<<"  "<<endl;
        size += 10;

        rotation +=2;
    }
}

void drawhex(GLint size, GLint rotation){

    //rotation 每次旋转1°,转换成n*π的形式
    for(GLint i = 0; i< 6; i++){
        //6个顶点坐标,以竖直为准。π=180°
        GLdouble angle = GLdouble(60 * i + rotation)*PI/180.0;
        glVertex2d(size*sin(angle),size*cos(angle));
        //cout<<"angle: "<<angle<<"pt.x: "<<size*sin(angle)<<"pt.y: "<<size*cos(angle)<<endl;
        //cout<<size*sin(angle)<<" "<<size*cos(angle)<<" ";
    }
    cout<<endl;

}

void myDisplay(void){
    glClear(GL_COLOR_BUFFER_BIT);
    glMatrixMode(GL_MODELVIEW);

    rotation = 0;        //0~60
    size = 10;            //10~290
    hexSwirl();
    glFlush();

}

void myInit(void){
    glClearColor(1.0,1.0,1.0,0.0);
    glColor3f(0.0f,0.0f,0.0f);
    glLineWidth(2.0);

}



解释图:


  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值