OpenGL学习之环境搭建

搭建环境是学习OpenGL的第一步,对于新手来说是最折磨人,也是最最耗时的一步,会遇到各种错误与困难。我在这一步也是尝试了很多次,失败了很多次。

在这里,推荐大家一个很好的学习OpenGL的网站:LearnOpenGL CN,它的原文是英文的,不过现在已经有了中文版的。

一、OpenGL的特点

1.OpenGL是一个跨语言和跨平台的图形编程接口,这个API用来与GPU交互,实现基于硬件加速的图形渲染。OpenGL实际上是一个抽象的图形渲染规范,尽管可以由软件来完全实现,但它被设计为大部分或者全部由硬件来实现。OpenGL是跨平台的、支持PC端、嵌入式设备、手机设备的渲染;同时也是跨语言的,它底层使用C语言实现,支持java语言、Python、javaScript绑定。

2.状态机
OpenGL自身是一个巨大的状态机(一系列的变量描述OpenGL此刻应当如何运行)。OpenGL的状态机称为OpenGL上下文(Context).我们通常使用如下途径去更改OpenGLzhuangtai :设置选项、操作缓冲。最后,我们使用当前OPenGL上下文来渲染。

三、OpenGL库的介绍

OpenGL有很多扩展库,例如gl、glu、glut、aux、wgl、glfw、glad、glew、freeglut、gltools、sdl、sfml、glx、agl等等根据LearnOpenGL CN学习网站,我们将使用GLAD和GLFW。

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

下载地址:GLFW官网

GLFW使用流程:
1)初始化GLFW库;
2)创建一个GLFW窗口以及OpenGL环境;
3)渲染场景;
4)将输出结果呈现给用户

2、GLAD
GLAD是继GL3W、GLEW之后,当前最新的用来访问OpenGL规范接口的第三方库。

下载地址:GLAD下载
打开GLAD在线服务,将语言设置为C/C++,在API选项中,选择3.3以上的OpenGL版本,之后将模式(Profile)设置为Core,并且保证生成加载器,忽略拓展中的内容,点击生成,下载Zip压缩文件。
GLAD使用流程:
1)初始化GLAD库,加载所有OpenGL函数指针。
2)创建着色器并附加到着色器程序。
3)构建缓冲对象并附加到顶点属性
4)使用着色器程序,利用渲染接口将缓冲对象按照指定图元类型渲染出来。

四、环境配置

下载的GLFW库要先进行编译,CMake(下载地址:http://www.cmake.org/cmake/resources/software.html) 是一个工程文件生成工具,用户可以使用预定义好的CMake脚本,根据自己的选择生成不同的IDE的工程文件,可以用它从GLFW源码里创建一个Visual Studio 2015工程文件,之后进行编译。
具体编译过程可以参考OpenGL扩展库基本介绍以及配置

1、建议大家新建一个opengl文件夹,文件夹底下按个人喜好新建子文件夹,我这里建了两个文件夹,分别用来放自己的代码(Code),SDK(库文件),SDK底下包括bin和include
opengl文件
OpenGL学习之环境搭建_第1张图片
2、把下载并解压后的GLAD的include的两个文件(glad和KHR)放到新建的include;

3、把编译好的GLFW的include底下的GLFW也放进新建的include;

4、根据自己的vs的版本将相应的lib-vc***中的glfw3.dll和glfw3.lib,glfw3dll.lib放进自己新建的文件夹

最后我的include文件中有以下文件(其中GLEW,glm可以忽略)
OpenGL学习之环境搭建_第2张图片
SDK文件夹底下包括以下内容(同样忽略glew相关内容)
OpenGL学习之环境搭建_第3张图片
5、然后打开vs,新建一个项目,右键项目名->选择属性->VC++目录->点击包含目录,把自己前面新建的include文件夹添加进去
OpenGL学习之环境搭建_第4张图片

6.点击库目录,把前面新建的包含.lib和.dll的文件路径加进去(如果你是分为两个文件夹,那么要添加两个),点击“应用”->确定
OpenGL学习之环境搭建_第5张图片
7、链接器->输入->附加依赖项,在里面加入opengl32.lib,
glfw3.lib,glfw3dll.lib,点击“应用”->确定
OpenGL学习之环境搭建_第6张图片
在使用glad之前我们要把glad.c添加进我们的项目,接着我们添加一个.cpp文件,用来测试我们的环境配置是否正确。

#include 
#include //包含头文件时要确保GLAD头文件是在GLFW的头文件之前。

#include

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

int main()
{
	glfwInit();			//初始化GLFW
	glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);		//主版本号为3
	glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);		//次版本号为3
	glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);	//使用核心模式
	
	//glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);	//Mac OS X系统
	GLFWwindow* window = glfwCreateWindow(800, 600, "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);

	if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
	{
		std::cout << "Failed to initialize GLAD" << std::endl;
		return -1;
	}

	while (!glfwWindowShouldClose(window))
	{
		processInput(window);
		glfwSwapBuffers(window);
		glfwPollEvents();
	}
	glfwTerminate();
	return 0;
}
void processInput(GLFWwindow *window)
{
	if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS)
		glfwSetWindowShouldClose(window, true);
}
void framebuffer_size_callback(GLFWwindow* window, int width, int height)
{
	
	glViewport(0, 0, width, height);
}

结果会出来一个窗口OpenGL学习之环境搭建_第7张图片

你可能感兴趣的:(opengl学习,三维渲染,vs2015配置glad,vs2015配置glfw)