VS2013搭建OpenGL环境

来源:互联网 发布:李世宏dota2 知乎 编辑:程序博客网 时间:2024/05/17 21:59

1.下载OpenGL需要的库文件 ,一般可以选择下载glut库(可从OpenGL官网下载http://www.opengl.org/resources/libraries/glut/glutdlls37beta.zip


2.解压,并把相应文件放入相应文件夹中

将glut.lib和glut32.lib这两个静态函数库复制到安装文件目录的lib文件夹下,一般为C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\lib;

将glut.dll,glut32.dll这两个动态库文件放到操作系统目录下面的C:\Windows\system32文件夹内(32位系统)或‪C:\Windows\SysWOW64(64位系统)。为了兼容性考虑,最好在这两个目录下都复制相应的文件;

将解压得到的头文件glut.h复制到安装目录下的include\GL文件夹下,一般为C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\GL(如果在incluce目录下没有GL文件夹,则需要手动创建)

至此,就在vs2013下成功搭建好了OpenGL环境。


3.示例程序

接下来,就可以创建一个空白的Win32控制台应用程序来测试下是否成功搭建。示例代码如下:

#include <stdlib.h>#include <GL/glut.h>#include <math.h>#include <stdio.h>static int year = 0, spin = 0, day = 0;static GLint fogMode;const int n = 100;const GLfloat R = 1.0f;const GLfloat Pi = 3.1415926536f;void DrawCircle(){int  i;glClear(GL_COLOR_BUFFER_BIT);glBegin(GL_LINE_LOOP);for (i = 0; i < n; ++i){glColor3f(1.0, 0.0, 0.0);glVertex2f(R*cos(2 * Pi / n*i), R*sin(2 * Pi / n*i));}glEnd();glFlush();}void init(void){GLfloat position[] = { 0.5, 0.5, 3.0, 0.0 };glEnable(GL_DEPTH_TEST);                          //防止遮挡glLightfv(GL_LIGHT0, GL_POSITION, position);glEnable(GL_LIGHTING);glEnable(GL_LIGHT0);{GLfloat mat[3] = { 0.1745, 0.01175, 0.01175 };glMaterialfv(GL_FRONT, GL_AMBIENT, mat);mat[0] = 0.61424; mat[1] = 0.04136; mat[2] = 0.04136;glMaterialfv(GL_FRONT, GL_DIFFUSE, mat);mat[0] = 0.727811; mat[1] = 0.626959; mat[2] = 0.626959;glMaterialfv(GL_FRONT, GL_SPECULAR, mat);glMaterialf(GL_FRONT, GL_SHININESS, 0.6*128.0);}glEnable(GL_FOG);{GLfloat fogColor[4] = { 0.5, 0.5, 0.5, 1.0 };fogMode = GL_EXP;glFogi(GL_FOG_MODE, fogMode);glFogfv(GL_FOG_COLOR, fogColor);glFogf(GL_FOG_DENSITY, 0.35);glHint(GL_FOG_HINT, GL_DONT_CARE);glFogf(GL_FOG_START, 1.0);glFogf(GL_FOG_END, 5.0);}glClearColor(0.5, 0.9, 0.9, 1.0);  /* fog color */}void display(void){glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);glColor3f(0.0, 1.0, 1.0);glPushMatrix(); //记住自己的位置glutSolidSphere(1.0, 20, 16);   /* 画太阳半径、 20经度、16纬度*/glRotatef(spin, 0.0, 1.0, 0.0);  //自转,绕着一个向量以给定角度旋转(正的为逆时针)glTranslatef(2.0, 1.0, 0.0);glRotatef(spin, 1.0, 0.0, 0.0); //公转glRectf(0.1, 0.1, 0.5, 0.5);glColor3f(0.0, 0.0, 1.0);glutWireSphere(0.2, 8, 8);    /* 画第一颗小行星 */glColor3f(1.0, 0.0, 0.0);glTranslatef(2.0, 1.0, 0.0);glRotatef(2 * spin, 0.0, 1.0, 0.0);glutSolidSphere(0.5, 16, 8);glPopMatrix();//回到原来的位置glutSwapBuffers();}void spinDisplay(void){spin = spin + 2;if (spin > 360)spin = spin - 360;glutPostRedisplay();}void mouse(int button, int state, int x, int y){switch (button){case GLUT_LEFT_BUTTON:if (state == GLUT_DOWN)glutIdleFunc(spinDisplay);break;case GLUT_MIDDLE_BUTTON:if (state == GLUT_DOWN)glutIdleFunc(NULL);break;default:break;}}void reshape(int w, int h){glViewport(0, 0, (GLsizei)w, (GLsizei)h);glMatrixMode(GL_PROJECTION);glLoadIdentity();gluPerspective(60.0, (GLfloat)w / (GLfloat)h, 0.5, 20.0);glMatrixMode(GL_MODELVIEW);glLoadIdentity();gluLookAt(0.0, 10.0, 10.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);}void keyboard(unsigned char key, int x, int y){switch (key) {case 'd':day = (day + 10) % 360;glutPostRedisplay();break;case 'D':day = (day - 10) % 360;glutPostRedisplay();break;case 'y':year = (year + 5) % 360;glutPostRedisplay();break;case 'Y':year = (year - 5) % 360;glutPostRedisplay();break;case 27:exit(0);break;default:break;}}int main(int argc, char** argv){glutInit(&argc, argv);glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);glutInitWindowSize(400, 400);glutInitWindowPosition(100, 100);glutCreateWindow("OpengGL 程序设计--杨超");init();//glutDisplayFunc(DrawCircle);glutDisplayFunc(display);glutReshapeFunc(reshape);//glutKeyboardFunc(keyboard);glutMouseFunc(mouse);glutMainLoop();return 0;}

如果成功运行,恭喜你!可楼主的运气总是很差,报错了!!


4.报错及解决方案

如果报错“error C2381: “exit”: 重定义;__declspec(noreturn) 不同”、“error C3861: “exit”:  找不到标识符”

说明程序把#include <stdlib.h>放在#include <GL/glut.h>后面了,调换顺序即可解决。


如果报错“error C1083: 无法打开包括文件:“GL/gl.h”: No such file or directory ”

说明和我一样vs系统目录下GL文件夹缺少gl.h文件,因此下载gl.h文件并放到GL文件夹就可以解决。可是上网找资料发现opengl的接口实现是显卡商实现的,也就是说自带的,一般网上下不到。最后楼主还是在网上找到了包含gl.h、glu.h、glut.h等全套资源(https://pan.baidu.com/s/1c0jKSgw,密码:yuph),下载下来之后将相应文件放入到相应文件夹,具体可参考第二步。


如果报错“error LNK1104:无法打开文件kernel32.lib”

解决方案:添加路径 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Lib 到项目属性->配置属性->VC++目录->库目录即可解决。


如果报错“lnk1158 无法运行rc.exe”

解决方案:进行如下操作 项目属性-常规-平台工具集里,选择Visual Studio 2013-Windows XP(v120_xp)。


如果报错“error LNK2019: 无法解析的外部符号 __imp____glutInitWithExit@12,该符号在函数 _glutInit_ATEXIT_HACK@8 中被引用”

解决方案1:在#include <GL/glut.h>前面加上了一句:#define GLUT_DISABLE_ATEXIT_HACK 。

解决方案2:选择项目 -->属性 C\C++-->preprocessor-->preprocessor definition添加GLUT_BUILDING_LIB;然后点击linker-- >input--> additional dependencies添加glut32.lib Opengl32.lib Glu32.lib。


终于成功了。如果你依然还没成功的话,那就继续加油!相信自己可以的!

原创粉丝点击