OpenGL环境配置教程:VS2012 + GLEW + GLFW + GLM

版权声明:本文为博主原创文章,如需转载,请注明出处: https://blog.csdn.net/MASILEJFOAISEGJIAE/article/details/84827273

前言

最近入坑图形学,打算从最基础的OpenGL学起,http://www.opengl-tutorial.org/ 是一个不错的OpenGL入门网站,教程代码的环境都配置好了,直接下载后CMake之后就能跑。现在手动在VS2012中把GLEW、GLFW、GLM配置一遍。

环境如下:

  1. Visual Studio 2012
  2. GLEW 2.1.0
  3. GLFW 3.2.1
  4. GLM 0.9.7.1

配置文件下载

为了方便配置,本教程使用官网编译好的Windows二进制文件,下载地址如下。如果想再装逼一点从头开始用CMake编译,可以参考这篇文章

GLEW(Windows binaries 64-bit and 32-bit , 版本2.1.0)下载地址
GLFW(Windows binaries 32-bit,版本3.2.1)下载地址
GLM(版本0.9.7.1)下载地址

配置步骤

1.将上述下载好的文件统一解压到一个文件夹内:

2.在VS2012中创建一个C++控制台空项目

3.设置包含目录

右键项目–>属性–>右键项目–>属性–>配置属性–>VC++目录–>包含目录
将解压好的3个文件夹里面的include分别添加进去,其路径如下:

{解压路径}\glew-2.1.0-win32\glew-2.1.0\include
{解压路径}\glfw-3.2.1.bin.WIN32\glfw-3.2.1.bin.WIN32\include
{解压路径}\GLEnvironment\glm-0.9.7.1\glm

4.设置库目录

右键项目–>属性–>右键项目–>属性–>配置属性–>VC++目录–>库目录
将GLEW和GLFW的lib目录添加进去,注意GLEW的lib要选择32位的,路径如下:

{解压路径}\glfw-3.2.1.bin.WIN32\glfw-3.2.1.bin.WIN32\lib-vc2012
{解压路径}\glew-2.1.0-win32\glew-2.1.0\lib\Release\Win32

5.设置附加依赖项

右键项目–>属性–>右键项目–>属性–>配置属性–>链接器–>输入->附加依赖项
添加以下3个附加依赖项:

glfw3.lib
glew32.lib
opengl32.lib

6.添加一个.cpp源文件进行测试,测试代码如下:

#include <stdio.h>
#include <stdlib.h>

#include <GL/glew.h>

#include <GLFW/glfw3.h>
GLFWwindow *window;

#include <glm/glm.hpp>
using namespace glm;

int main(void)
{
	// Initialise GLFW
	if (!glfwInit())
	{
		fprintf(stderr, "Failed to initialize GLFW\n");
		getchar();
		return -1;
	}

	glfwWindowHint(GLFW_SAMPLES, 4);
	glfwWindowHint(GLFW_RESIZABLE, GL_FALSE);
	glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
	glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
	glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); // To make MacOS happy; should not be needed
	glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

	// Open a window and create its OpenGL context
	window = glfwCreateWindow(1024, 768, "Playground", NULL, NULL);
	if (window == NULL)
	{
		fprintf(stderr, "Failed to open GLFW window. If you have an Intel GPU, they are not 3.3 compatible. Try the 2.1 version of the tutorials.\n");
		getchar();
		glfwTerminate();
		return -1;
	}
	glfwMakeContextCurrent(window);

	// Initialize GLEW
	glewExperimental = true; // Needed for core profile
	if (glewInit() != GLEW_OK)
	{
		fprintf(stderr, "Failed to initialize GLEW\n");
		getchar();
		glfwTerminate();
		return -1;
	}

	// Ensure we can capture the escape key being pressed below
	glfwSetInputMode(window, GLFW_STICKY_KEYS, GL_TRUE);

	// Dark blue background
	glClearColor(0.0f, 0.0f, 0.4f, 0.0f);
GLuint VertexArrayID;
	glGenVertexArrays(1, &VertexArrayID);
	glBindVertexArray(VertexArrayID);

	// Create and compile our GLSL program from the shaders
	// GLuint programID = LoadShaders( "SimpleVertexShader.vertexshader", "SimpleFragmentShader.fragmentshader" );


	static const GLfloat g_vertex_buffer_data[] = { 
		-1.0f, -1.0f, 0.0f,
		 1.0f, -1.0f, 0.0f,
		 0.0f,  1.0f, 0.0f,
	};

	GLuint vertexbuffer;
	glGenBuffers(1, &vertexbuffer);
	glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer);
	glBufferData(GL_ARRAY_BUFFER, sizeof(g_vertex_buffer_data), g_vertex_buffer_data, GL_STATIC_DRAW);

	do
	{
		glClear(GL_COLOR_BUFFER_BIT);

		// Draw nothing, see you in tutorial 2 !
		glEnableVertexAttribArray(0);
		glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer);
		glVertexAttribPointer(
			0,                  // attribute 0. No particular reason for 0, but must match the layout in the shader.
			3,                  // size
			GL_FLOAT,           // type
			GL_FALSE,           // normalized?
			0,                  // stride
			(void*)0            // array buffer offset
		);

		// Draw the triangle !
		glDrawArrays(GL_TRIANGLES, 0, 3); // 3 indices starting at 0 -> 1 triangle

		glDisableVertexAttribArray(0);
		// Swap buffers
		glfwSwapBuffers(window);
		glfwPollEvents();

	} // Check if the ESC key was pressed or the window was closed
	while (glfwGetKey(window, GLFW_KEY_ESCAPE) != GLFW_PRESS &&
		   glfwWindowShouldClose(window) == 0);

	// Close OpenGL window and terminate GLFW
	glfwTerminate();

	return 0;
}

如无意外这时候会报错:

扫描二维码关注公众号,回复: 4386154 查看本文章

7.添加动态链接库:

将glew32.dll复制到本工程的.exe文件生成的目录下:

glew32.dll路径:

{解压目录}\glew-2.1.0-win32\glew-2.1.0\bin\Release\Win32\glew32.dll

运行结果:


参考资料:

  1. openGL编程-环境配置(glfw;glew;glm相关 ) - github_37020016的博客
  2. http://glew.sourceforge.net/
  3. https://www.glfw.org/download.html
  4. https://github.com/g-truc/glm

猜你喜欢

转载自blog.csdn.net/MASILEJFOAISEGJIAE/article/details/84827273