【OpenGL手把手实战一】最全最完整图解教程:安装VS2015部署OpenGL开发环境(亲测!)

今天从零开始,连续写关于在Windows下用VS2015开发学习OpenGL的过程,实战记录!!

手把手实战指导,每一步都是图文并茂详解,不怕你学不会,就怕你不想动!


第一步:首先你要下载并安装VS2015版本。

今后的相关连载文章或源码,都会以这个版本展开。

VS2015的具体下载和安装,这里就不讲了,网上搜一下应该很多。




第二步:准备好OpenGL的相关库,主要有两个GLFW和GLAD。

GLFW:是一个专门针对OpenGL的C语言库,它提供了一些渲染物体所需的最低限度的接口。它允许用户创建OpenGL上下文,定义窗口参数以及处理用户输入,这正是我们需要的。

GLAD:由于OpenGL驱动版本众多,它大多数函数的位置都无法在编译时确定下来,需要在运行时查询。所以任务就落在了开发者身上。幸运的是,有些库能简化此过程,其中GLAD是目前最新,也是最流行的库。



A:如何获得GLFW ?你可以从这个地址进行下载 

  (点击打开)  http://www.glfw.org/download.html


GLFW的官网提供了Source包和编译好的Binaries文件,我们选择下载(32-bit Windows binaries)。

为什么选择32-bit位的而不是64-bit位的呢?这里它一定要和你的VS2015的工程x86对应上。x86表示32位。




第三步:创建一个C++的工程,用来准备我们的测试。

打开安装好的VS2015,我们来创建一个名称叫”TestOpenGL“的C++“空项目”。


然后在项目名称上右键菜单,打开项目所在的目录。


然后,在项目目录下创建两个文件夹,分别是。Includes 和 Libs。像下图这样。

把在第二步下载好的GLFW的压缩包(glfw-3.2.1.bin.WIN32.zip)打开。


(a)把压缩包中的  ../include/GLFW/ 中的 glfw3.h 复制到上面在项目中创建好的 Inlcudes 文件夹中。

(b)把压缩包中的  ../lib-vc2015/ 中的 glfw3.lib 复制到上面在项目中创建好的 Libs 文件夹中。

回到VS2015软件界面中,在工程TestOpenGL名称上右键,选择《属性》。在弹出的“属性”界面中,选择C++目录。

在“包含目录”中添加 Inlcudes 文件夹目录。在“库目录”中添加 Libs 文件夹。如下图所示:


然后继续,左边点击链接器,输入,附加依赖项里输入:opengl32.lib   glfw3.lib 。

点击确定,到这里GLFW的环境已经布署完毕。接下来开始布署第二步提到的GLAD。



第三步:准备和布署GLAD。

A:如何获取GLAD ? 我们可以在它的一个在线服务网站来获得。(点击打开)http://glad.dav1d.de/


如上图所示,在API选择Version3.3,在Profile选项 Core。然后下面的Options保证Generate a loader是勾上的。

点击 GENERATE 来创建和生成所要的包。


点击glad.zip下载到电脑。打开压缩包所下图所示。


(a)打开压缩包,把include中所有的文件复制到我们的Includes中

(b)把src中的文件 glad.c 复制到项目目录下,如下图所示:


然后,回到VS2015软件界面中。在源文件上右键,添加现有项,把glad.c添加进去。


到这里,GLFW和GLAD就全部搞完了。



最后一步,就是见证奇迹的时刻了!!!!

创建一个 mian.cpp 输入以下测试内容,先不用管这些代码有什么用。看不懂没关系后边会讲解。

现在主要是为了测试并启动openGL渲染窗口,来验证开发环境是否正确无误。

#include "Includes\glad\glad.h"  
#include "Includes\glfw3.h" 

#include <iostream>

void framebuffer_size_callback(GLFWwindow* window, int width, int height);
void processInput(GLFWwindow *window);

// settings
const unsigned int SCR_WIDTH = 800;
const unsigned int SCR_HEIGHT = 600;

int main()
{
	// glfw: initialize and configure
	// ------------------------------
	glfwInit();
	glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
	glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
	glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

#ifdef __APPLE__
	glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); // uncomment this statement to fix compilation on OS X
#endif

														 // glfw window creation
														 // --------------------
	GLFWwindow* window = glfwCreateWindow(SCR_WIDTH, SCR_HEIGHT, "LearnOpenGL", NULL, NULL);
	if (window == NULL)
	{
		std::cout << "Failed to create GLFW window" << std::endl;
		glfwTerminate();
		return -1;
	}
	glfwMakeContextCurrent(window);
	glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);

	// glad: load all OpenGL function pointers
	// ---------------------------------------
	if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
	{
		std::cout << "Failed to initialize GLAD" << std::endl;
		return -1;
	}

	// render loop
	// -----------
	while (!glfwWindowShouldClose(window))
	{
		// input
		// -----
		processInput(window);

		// render
		// ------
		glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
		glClear(GL_COLOR_BUFFER_BIT);

		// glfw: swap buffers and poll IO events (keys pressed/released, mouse moved etc.)
		// -------------------------------------------------------------------------------
		glfwSwapBuffers(window);
		glfwPollEvents();
	}

	// glfw: terminate, clearing all previously allocated GLFW resources.
	// ------------------------------------------------------------------
	glfwTerminate();
	return 0;
}

// process all input: query GLFW whether relevant keys are pressed/released this frame and react accordingly
// ---------------------------------------------------------------------------------------------------------
void processInput(GLFWwindow *window)
{
	if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS)
		glfwSetWindowShouldClose(window, true);
}

// glfw: whenever the window size changed (by OS or user resize) this callback function executes
// ---------------------------------------------------------------------------------------------
void framebuffer_size_callback(GLFWwindow* window, int width, int height)
{
	// make sure the viewport matches the new window dimensions; note that width and 
	// height will be significantly larger than specified on retina displays.
	glViewport(0, 0, width, height);
}

调试运行,如果不出现意外,你的窗口应该如图所示,大功告成!!!

搞到这里,想想还是有些小激动,虽然是个小小开始,这就是迈向成功的一大步!


大门已经开启,接下来,是时候开始表演真正的技术了!!

从零开始真正进入OpengGL的3D世界!!

猜你喜欢

转载自blog.csdn.net/sjt223857130/article/details/80037749