OpenGL+VS2017 环境配置(亲测好使)<附带必要知识点>

首先参考了LearnOpenGL文档,此文档也适合新手入门,目前也在学习中,感觉非常不错。配合而《OpenGL编程指南》看效果会更好。

{

更新(2018年12月8号更 关于很多小伙伴留言说---不想重复包含include路径和lib路径问题)

建议新来的小伙伴先看原来的配置教程,先看懂原理,以不变应万变。

第一步: 打开 VS2017 找到 View->Other Windows->Property Manager 

OpenGL+VS2017 环境配置(亲测好使)<附带必要知识点>_第1张图片

第二步:右边会蹦出一个框(根据你的库类型选择Debug还是Release,平台是Win32还是x64,一般是Debug平台是Win32)

OpenGL+VS2017 环境配置(亲测好使)<附带必要知识点>_第2张图片

第三步:加入头文件include文件夹路径和库文件lib文件夹路径(注意这里是VC++ Directories选项,只需要配置include和lib文件夹路径)

OpenGL+VS2017 环境配置(亲测好使)<附带必要知识点>_第3张图片

第四步:点击 确定

之后你每创建新工程后都不用再配置include路径和lib路径了。

 

第五步:添加需要的库文件,现在你只需要在不同工程指定你需要的库文件就好了。这和原来配置添加库文件是一样的,只不过不需要配置include和lib的路径了只需要添加库文件就行。因为include头文件目录和lib库文件目录之前已经配置好了。

}

第一步:

 下载vs2107(2013以上的版本也行,太老的版本不太清楚)

第二步:

1.下载GLFW

OpenGL+VS2017 环境配置(亲测好使)<附带必要知识点>_第4张图片

注:64位的会有莫名其妙的bug

2.下载GLEW

OpenGL+VS2017 环境配置(亲测好使)<附带必要知识点>_第5张图片

注:有的小伙伴可能会对OpenGL的各种头文件、库文件整糊涂肯定会有人问GLUT不下吗?在这里有必要说明一下:

(此处如果看不太懂,可以跳过看下面的【综上所述】)

一.OpenGL

 

OpenGL函数库相关的API有核心库(gl),实用库(glu),辅助库(aux)、实用工具库(glut),窗口库(glx、agl、wgl)和扩展函数库等。gl是核心,glu是对gl的部分封装。glx、agl、wgl 是针对不同窗口系统的函数。glut是为跨平台的OpenGL程序的工具包,aux功能强大(aux很大程度上已经被glut库取代。)。扩展函数库是硬件厂商为实现硬件更新利用OpenGL的扩展机制开发的函数。

 

二.gult:OpenGL工具库 OpenGL Utility Toolkit

 

这部分函数以glut开头,主要包括窗口操作函数,窗口初始化、窗口大小、窗口位置等函数;回调函数:响应刷新消息、键盘消息、鼠标消息、定时器函数等;创建复杂的三维物体;菜单函数;程序运行函数。gult对应的开源实现是freegult。

 

三.glew

GLUT或者FREEGLUT主要是1.0的基本函数功能;GLEW是使用OPENGL2.0之后的一个工具函数。

不同的显卡公司,也会发布一些只有自家显卡才支 持的扩展函数,你要想用这数涵数,不得不去寻找最新的glext.h,有了GLEW扩展库,你就再也不用为找不到函数的接口而烦恼,因为GLEW能自动识别你的平台所支持的全部OpenGL高级扩展函数。也就是说,只要包含一个glew.h头文件,你就能使用gl,glu,glext,wgl,glx的全部函数

 

四.glfw

 

GLFW无愧于其号称的lightweight的OpenGL框架,的确是除了跨平台必要做的事情都没有做,所以一个头文件,很少量的API,就完成了任务。GLFW的开发目的是用于替代glut的,从代码和功能上来看,我想它已经完全的完成了任务。

一个轻量级的,开源的,跨平台的library。支持OpenGL及OpenGL ES,用来管理窗口,读取输入,处理事件等。因为OpenGL没有窗口管理的功能,所以很多热心的人写了工具来支持这些功能,比如早期的glut,现在的freeglut等。

那么GLFW有何优势呢?glut太老了,最后一个版本还是90年代的。freeglut完全兼容glut,算是glut的代替品,功能齐全,但是bug太多。稳定性也不好(不是我说的啊),GLFW应运而生。

 

 

综上所述:(2018年12月8日更新,对以下三条进行了一些补充)

1.OpenGL只有框架没有实现,换句话说就是OpenGL只有函数声明没有实现,类似于接口和虚函数。所有的实现是显卡生产商提供。比如NVIDIA(英伟达)就要自己实现OpenGL函数内容,所以不同的生产商可以对自己的产品提供优化,毕竟代码是自己写的。

2.glfw是glut的升级和改进。glfw是用来显示窗口和捕捉窗口事件的一套API,可以理解成Qt和windows平台的WPF。OpenGL只是一套控制GPU的规则,并没有对于跨平台窗口显示和事件进行规定,所以需要一个显示显卡渲染的窗口,这就是glfw的作用。笔者建议用glfw学openGL学的感觉差不多了,可以学学Qt,这是一个非常强大的跨平台GUI库,非常推荐。

3.glew包含了OpenGL所需的核心:<补充>第一条已经说过openGL的实现是显卡生产商,那么系统如何才能找到这些实现好的函数呢?而且不同的平台函数存放地方还不同,文件结构也不同。有没有一种方式能够自动找到OpenGL的函数?--这就是glew的作用-->用来找openGL的函数,并初始化,这样我们就能直接调用OpenGL的函数了。

{

!!!更新(2018年7月更)!!!:glad与glew,简单说glad是glew的升级版。用哪个都行。就是glew比较老,glad比较新。

   说明:

   {

  1. glad有一个在线服务,直接下下来就可以用了(编译好的),将语言(Language)设置为C/C++,在API选项中,选择3.3以上的OpenGL版本(3.3是可编程管线版本,但更新的版本也能正常工作)。之后将模式(Profile)设置为Core,并且保证生成加载器(Generate a loader)的选项是选中的。现在可以先(暂时)忽略拓展(Extensions)中的内容。都选择完之后,点击生成(Generate)按钮来生成库文件。
  2. 下载是个压缩文件,解压完成后会有这样的文件夹结构:OpenGL+VS2017 环境配置(亲测好使)<附带必要知识点>_第6张图片
  3. 包含两个头文件目录(内有头文件glad.h和khrplatform.h),和一个src文件夹下的glad.c文件。
  4. 只需要将原来的第五步的 VC++目录 -> 包含目录 中的glew的include文件夹改成glad的include文件夹即可。后面的步骤glad都不需要。
  5. 将glad.c文件复制到源文件夹下:OpenGL+VS2017 环境配置(亲测好使)<附带必要知识点>_第7张图片
  6. 注意glad.c文件这时候或者编译的时候会出错,首先看看glad.c的include的路径是不是对的,有时候包含目录文件夹路径不一样,你要改成你自己配置的glad路径(就是之前VC++目录配置的路径)。
  7. 将第七步的代码改成如下
  8. #include 
    #include 
    
    #include 
    
    const unsigned int SCR_WIDTH = 800;
    const unsigned int SCR_HEIGHT = 600;
    
    int main()
    {
        glfwInit();
        glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
        glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
        glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
    
        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);
    
        if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
        {
            std::cout << "Failed to initialize GLAD" << std::endl;
            return -1;
        }    
    
        while (!glfwWindowShouldClose(window))
        {
    
            glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
            glClear(GL_COLOR_BUFFER_BIT);
    
            glfwSwapBuffers(window);
            glfwPollEvents();
        }
    
        glfwTerminate();
        return 0;
    }
    

     

 

          代码说明请参考原先第七步,原理都差不多。

   }

}

第三步:

解压下载的文件。

 

 

第四步:

1.打开vs2017,新建c++空项目。

OpenGL+VS2017 环境配置(亲测好使)<附带必要知识点>_第8张图片

注:如果新建Windows控制台应用程序,程序内部会自动包含stdafx.h的头文件,你必须在源文件的开头写上“#include“stdafx.h”相关语句,而且之后引入glew,glfw包会有莫名其妙的错误。所以创建一个空项目。

 

2.点击“解决方案资源管理器”,右键点击源文件,添加新项,创建.cpp源文件(我起名叫main.cpp)

OpenGL+VS2017 环境配置(亲测好使)<附带必要知识点>_第9张图片

OpenGL+VS2017 环境配置(亲测好使)<附带必要知识点>_第10张图片

 

 

第五步:

 1.右键点击项目,在弹出的选项中,单击 “属性”

OpenGL+VS2017 环境配置(亲测好使)<附带必要知识点>_第11张图片

OpenGL+VS2017 环境配置(亲测好使)<附带必要知识点>_第12张图片

 

 

2.点击“VC++目录”,第二步会有下拉列表,单击“编辑”

OpenGL+VS2017 环境配置(亲测好使)<附带必要知识点>_第13张图片

OpenGL+VS2017 环境配置(亲测好使)<附带必要知识点>_第14张图片

 

3.点击添加头文件。分别添加下载的glew和glfw文件夹下的include文件夹(include文件夹下是我们需要的头文件),点击“确定”

OpenGL+VS2017 环境配置(亲测好使)<附带必要知识点>_第15张图片

 

4.同样的道理,加入库文件。(库文件和头文件是相辅相成的),对应的路径就是glew和glfw文件夹下的lib文件夹

注:

1.当添加glew时,当选到lib文件夹后请继续选择,lib->Release->Win32,请选择Win32后点击“选择文件夹”(x64会有莫名其妙的问题)

2.当添加glfw时,低版本请选择对应版本,2015以上版本请选择“lib-vc2015”

OpenGL+VS2017 环境配置(亲测好使)<附带必要知识点>_第16张图片

OpenGL+VS2017 环境配置(亲测好使)<附带必要知识点>_第17张图片

 

 

第六步

1.包含的库文件VS还认不出来,我们需要指定一下。配置链接器。

OpenGL+VS2017 环境配置(亲测好使)<附带必要知识点>_第18张图片

 

2.点击“编辑”后输入如下:

 

opengl32.lib
glfw3.lib
glew32s.lib

注:

 

行与行之间请按回车

opengl32.lib是系统自带的。

glfw3.lib,glew32.lib,glew32s.lib 如果你足够细心,你会发现这些就是之前包含的lib文件夹下的文件名

不包括:

glew32.lib

 

OpenGL+VS2017 环境配置(亲测好使)<附带必要知识点>_第19张图片

点击“确定”

 

至此OpenGL的环境就初步配好了,为什么叫“初步配好呢”?

答案:vs可能会和这些文件起冲突,不过不用担心,配置很简单

 

第七步:让我们来看看写代码到底运行好不好使

1.在之前的main.cpp中添加如下代码:(初始化一个Opengl窗口)

 

 

#include
#define GLEW_STATIC
#include 
#include

using namespace std;

int main(int argc, char** argv[])
{
	/*glewExperimental = GL_TRUE;
	if (glewInit()!=GLEW_OK)
	{
		cout << "failed to initalize GLEW" << endl;
		return -1;
	}*/

	glfwInit();//初始化
	glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);//配置GLFW
	glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);//配置GLFW
	glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);//
	glfwWindowHint(GLFW_RESIZABLE, GL_FALSE);

	GLFWwindow* window = glfwCreateWindow(800, 600, "LearnOpenGL", nullptr, nullptr);
	if (window==nullptr)
	{
		cout << "Failed to create GLFW window" << endl;
		glfwTerminate();
		return -1;
	}
	glfwMakeContextCurrent(window);
	while (!glfwWindowShouldClose(window))
	{
		glfwPollEvents();
		glfwSwapBuffers(window);
	}
	glfwTerminate();
	return 0;


}

2.点击“运行”

 

OpenGL+VS2017 环境配置(亲测好使)<附带必要知识点>_第20张图片

 

恭喜!!!恭喜!!!你已经成功初始化了一个OpenGL的窗口!!!但是~~~

 

当我们关掉程序回到“错误列表”中会发现

警告LNK4098默认库“MSVCRT”与其他库的使用冲突;请使用 /NODEFAULTLIB:libraryOpen

C:\Users\g1018\source\repos\Open\Open\LINK1

 

 

OpenGL+VS2017 环境配置(亲测好使)<附带必要知识点>_第21张图片

 

不用担心,解决方法如下:

1.还记得之前的链接器的那个页面吗?调出来

OpenGL+VS2017 环境配置(亲测好使)<附带必要知识点>_第22张图片

2.点击“编辑”,输入如下:

 

MSVCRT.lib

OpenGL+VS2017 环境配置(亲测好使)<附带必要知识点>_第23张图片

 

 

 

 

 

点击“确地”

注:如果往后还有库冲突,解决方法同理

 

 

至此所有配置都已经配完了,祝小伙伴学习快乐!!!

 

 

 

你可能感兴趣的:(OpenGL)