OpenGL环境搭建:vs2017+glfw3.2.1+glad4.5

安装vs2017:参考vs2017下载和安装。

安装cmake3.12.3:cmake是一个工程文件生成工具。用户可以使用预定义好的cmake脚本,根据自己的选择(像是Visual Studio, Code::Blocks, Eclipse)生成不同IDE的工程文件。可以从它官方网站的下载页上获取。这里我选择的是Win64安装程序,如图所示:
OpenGL环境搭建:vs2017+glfw3.2.1+glad4.5_第1张图片
然后就是运行安装程序进行安装就行。

配置glfw3.2.1:glfw是创建opengl上下文,以及操作窗口的工具库。配置流程如下:
1.可以从它官方网站的下载页上获取。这里我们下载的是3.2.1版本的glfw源码工程。如图所示:
OpenGL环境搭建:vs2017+glfw3.2.1+glad4.5_第2张图片

2.解压glfw的源码工程压缩包,在解压后的工程中新建一个build目录用来存放vs工程。然后使用cmake的gui来生成vs工程。生成过程如图所示:
OpenGL环境搭建:vs2017+glfw3.2.1+glad4.5_第3张图片

3.在build目录中找到GLFW.sln文件,用vs2017打开。因为cmake已经配置好了项目,所以我们直接点击Build Solution(生成解决方案)按钮,然后编译的库glfw3.lib就会出现在src/Debug文件夹内。

4.建立第三方库文件和头文件存放目录Libraries,里面包含Libs和Include文件夹,在这里存放OpenGL工程用到的所有第三方库和头文件。此时将glfw的include目录内容复制到Libraries/Include目录下,将生成好的glfw3.lib放在Libraries/Libs目录下。

配置glad4.5:glad是访问opengl接口的工具库。配置流程如下:
1.打开glad的在线服务,将语言(Language)设置为C/C++,在API选项中,选择4.5以上的OpenGL(gl)版本。之后将模式(Profile)设置为Core,并且保证生成加载器(Generate a loader)的选项是选中的。点击生成(Generate)按钮来生成库文件glad-4.5.zip。

2.解压获取到的glad-4.5.zip文件,将include目录内容复制到Libraries/Include目录下。

配置OpenGL工程
1.打开vs2017创建一个新的项目。如果vs提供了多个选项,选择Visual C++,然后选择Empty Project(空项目)并创建。如图所示:
OpenGL环境搭建:vs2017+glfw3.2.1+glad4.5_第4张图片

2.进入Project Properties(工程属性,在解决方案窗口里右键项目),然后选择VC++ Directories(VC++ 目录)选项卡。在Include Directories选项中将Libraries/Include引入进来。在Library Directories选项中将Libraries/Libs引入进来。如图所示:
OpenGL环境搭建:vs2017+glfw3.2.1+glad4.5_第5张图片

3.在Linker(链接器)选项卡里的Input(输入)选项卡里添加opengl32.lib以及glfw3.lib。如图所示:
OpenGL环境搭建:vs2017+glfw3.2.1+glad4.5_第6张图片
此处的opengl32.lib已经包含在Microsoft SDK里了,它在Visual Studio安装的时候就默认安装了。而glfw3.lib就是上文配置glfw时所生成的库文件。

4.将glad的src目录中的glad.c文件添加到当前工程中。

5.新建一个cpp文件并将以下代码复制进去,代码如下:

#include 
#include 

#include 

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);
}

运行工程查看是否得到如图所示窗口,要是编译不过就要往上查看相关配置是否正确。结果如图所示:
OpenGL环境搭建:vs2017+glfw3.2.1+glad4.5_第7张图片

参考
1.https://learnopengl-cn.github.io

你可能感兴趣的:(OpenGL)