#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);
#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);
}
解释图: