绘制旋转多边形:
#include "stdafx.h" #include <math.h> #include <Windows.h> #include <glglut.h> #include <stdlib.h> #define PI 3.14159 //设置圆周率 int n = 6, R = 10; //多边形变数,外接圆半径 float theta = 0.0; //旋转初始角度值 void Keyboard(unsigned char key, int x, int y); void Display(void); void Reshape(int w, int h); void myidle(); int main(int argc, char** argv) { // must/should match the number of strings in argv glutInit(&argc, argv); //初始化GLUT库; glutInitWindowSize(400, 400); //设置显示窗口大小 glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB); //设置显示模式;(注意双缓冲) glutCreateWindow("A Rotating Square"); // 创建显示窗口 glutDisplayFunc(Display); //注册显示回调函数 glutReshapeFunc(Reshape); //注册窗口改变回调函数 glutIdleFunc(myidle); //注册闲置回调函数 glutMainLoop(); //进入事件处理循环 return 0; } void Display(void) { glClearColor(0, 1, 1, 0);//设置浅蓝色绘图背景颜色(清屏颜色) glClear(GL_COLOR_BUFFER_BIT); glColor3f(0, 0, 1); //设置深蓝色绘图颜色 glBegin(GL_POLYGON); //开始绘制六边形 for (int i = 0; i<n; i++) glVertex2f(R*cos(theta + i * 2 * PI / n), R*sin(theta + i * 2 * PI / n)); glEnd(); glutSwapBuffers(); //双缓冲的刷新模式; } void myidle() { theta += 1.0; //旋转角度增加1度 if (theta >= 2 * PI) { theta -= 2 * PI; //如果旋转角度大于360度,则复原 } glutPostRedisplay(); //重画,相当于重新调用Display(),改编后的变量得以传给绘制函数 } void Reshape(GLsizei w, GLsizei h) { glMatrixMode(GL_PROJECTION); //投影矩阵模式 glLoadIdentity(); //矩阵堆栈清空 gluOrtho2D(-1.5*R*w / h, 1.5*R*w / h, -1.5*R, 1.5*R); //设置裁剪窗口大小 glViewport(0, 0, w, h); //设置视区大小 glMatrixMode(GL_MODELVIEW); //模型矩阵模式 }
LNK2019问题:
解决方法:
在#include <GL/glut.h>前面加上了一句: #define GLUT_DISABLE_ATEXIT_HACK
(!!!注意,是前面!!!)