WindowsOpenGL开发环境搭建&测试

需要使用 的类库:

  GLFW GLEW GLUT...

    •  以下使用 GLFW&GLEW,Windows下使用 VS的包管理器 可以找到这两个包,
      • 项目 > 管理NuGet程序包
    •  安装后,在项目目录package里可以找到对应类库

Windows平台配置:

  1. 安装好GLEW,GLFW后,packages中包含可能包含全部版本的类库,请选择正确版本
    • GLEW版本不限,更高级的版本,支持的OpenGL版本也就越高。
    • GLFW根据平台不同,划分出了适配不同平台的版本,所以要选择正确的平台。

 

    2. Windows下开发OpenGL渲染器  推荐使用VS

    3. VS开发可以使用  属性表(.props)  配置项目环境:

    • 视图 > 其他窗口 > 属性管理器
      • 展开项目属性列表后,有4个筛选器,分别对应四种调试模式下的  属性表单
      • 可以选择第一个筛选器,右键选择添加 > 新项目属性表
      • 双击新建的属性表,可以配置该属性表

 

    • 将头文件,置入:
      • 属性表文件(.props) > VC++目录 > 包含目录

      

    • 针对静态链接库,需要设置以下两项:
      • 静态库的路径
        • 属性表文件(.props) > VC++目录 > 库目录
      • 需要使用的静态库文件
        • 属性表文件(.props) > 链接器 > 输入 > 附加依赖项

 

    • 针对动态链接库,有以下两种情况:
      • 此动态链接库拥有 函数列表(.lib)
        • 将函数列表(.lib)加入到项目。
        • 将动态链接库置入:可执行程序生成路径,或环境变量path指定的位置。
      • 此动态链接库没有 函数列表(.lib)
        • 将动态链接库置入:可执行程序生成路径,或环境变量path指定的位置。

 

Windows平台测试:

    1. 新建项目 > 配置项目环境 > 添加main.cpp

main.cpp:

#include<iostream>
#include<glew.h>
#include<glfw3.h>

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


int main(int _Argc, char** argv)
{
    // 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);
#endif

    // glfw window creation
    // --------------------
    GLFWwindow* window = glfwCreateWindow(1000,700, "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);// Init GLEW to manage OpenglFuncptr(Because of GLEW,we can use OpenglFunc)
    glewExperimental = GL_TRUE;
    if (glewInit() != GLEW_OK)
    {
        std::cout << "Failed to initialize GLEW" << std::endl;
        return -1;
    }

    // configure global opengl state
    // -----------------------------
    glEnable(GL_DEPTH_TEST);

    while (!glfwWindowShouldClose(window))
    {

        // input
        // -----
        processInput(window);

        // render
        // ------
        glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_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);
}

    2. 在函数 glClearColor(r, g, b, a) 中,改变颜色,如果颜色显示正常,则测试通过,按Esc可以退出窗口。