一、环境介绍
- 操作系统:windows10 家庭中文版
- 系统类型:64位操作系统,基于x64的处理器
- vs版本 :visual studio 2013
二、opengGL的环境配置
2.1 在这里我们有三个资源文件,分别为dll,GL和lib文件夹
- 动态链接库dll(dynamic link library)
- GL文件
- lib文件
2.2 将三个文件夹中的内容拷贝到相应目录下
-
动态链接库dll(dynamic link library)
C:\Windows\System32
C:\Windows\SysWOW64 -
GL文件
D:\vs\VC\include
注:D:\vs为我的vs2013的安装目录
- lib文件
D:\vs\VC\lib
2.3 在visual studio中进行环境配置
- 右键创建的opengGL工程
- 选择最下方的Properties
- 找到Additional include Directories选项,添加头文件资源所在的路径(这里找到的是2.1部分提到的GL文件夹)
- 找到Additional Libraries Directories选项,添加库文件资源所在的路径(这里找到的是2.1部分提到的lib文件夹)
- 在Linker/input/Addtional Dependencies添加Lib依赖项
GLAUX.LIB
glew32.lib
glew32mx.lib
glew32mxs.lib
glew32s.lib
OPENGL32.LIB
glut32.lib
glut.lib
GLU32.LIB
三、环境测试
#define GLUT_DISABLE_ATEXIT_HACK
#include <Windows.h>
#include <glut.h> // (or others, depending on the system in use)
void init(void)
{
glClearColor(1.0, 1.0, 1.0, 0.0); // Set display-window color to white.
glMatrixMode(GL_PROJECTION); // Set projection parameters.
gluOrtho2D(0.0, 200.0, 0.0, 150.0);
}
void lineSegment(void)
{
glClear(GL_COLOR_BUFFER_BIT); // Clear display window.
glColor3f(0.0, 0.4, 0.2); // Set line segment color to green.
glBegin(GL_LINES);
glVertex2i(180, 15); // Specify line-segment geometry.
glVertex2i(10, 145);
glEnd();
glFlush(); // Process all OpenGL routines as quickly as possible.
}
void main(int argc, char** argv)
{
glutInit(&argc, argv); // Initialize GLUT.
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); // Set display mode.
glutInitWindowPosition(50, 100); // Set top-left display-window position.
glutInitWindowSize(400, 300); // Set display-window width and height.
glutCreateWindow("An Example OpenGL Program"); // Create display window.
init(); // Execute initialization procedure.
glutDisplayFunc(lineSegment); // Send graphics to display window.
glutMainLoop(); // Display everything and wait.
}
四、运行结果
五、问题与解决
- error C2381: “exit” : 重定义;__declspec(noreturn) 不同
OpenGL和C++有不太融合的地方,在include时要让标准C++类库的头文件位于GLUT图形库头文件之前。
#include <Windows.h>
#include <glut.h>
-
运行提示缺少OPENGL.DLL的原因
opengl不知道自己现在应该调用哪个版本的指令,是opengl32.dll还是OPENGL.dll,我们在目录下只放置了opengl32.dll,在代码中再添加windows.h头文件即可
#include <Windows.h>
- Error 1 error LNK2019: unresolved external symbol imp__
glutInitWithExit@12 referenced in function _glutInit_ATEXIT_HACK@8 D:\c++\openGL\openGL\ch3OGLexample.obj openGL
在glut.h头文件之前添加#define GLUT_DISABLE_ATEXIT_HACK
#define GLUT_DISABLE_ATEXIT_HACK
#include <Windows.h>
#include <glut.h>