首页 > 技术文章 > OpenGL绘制旋转多边形遇到的LNK2019的解决方法

djlobster 2020-05-19 18:06 原文

绘制旋转多边形:

#include "stdafx.h"
#include <math.h>
#include <Windows.h>
#include <gl\glut.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 
(!!!注意,是前面!!!)

推荐阅读