QT + opengl 环境搭建(glfw, glad),创建一个简单窗口

一.下载glfw,glad并编译

        1.glfw个人理解就是对底层opengl的一些基本接口的封装,提供了一些渲染物体所需的最低限度的接口。它允许用户创建OpenGL上下文、定义窗口参数以及处理用户输入。glfw的下载地址:Download | GLFW,下载完成后,打开cmake,设置工程路径和编译路径,生成sln工程,选择x86进行编译,得到库3.3.9版本glfw3.lib。

        2.glad,是一个开源的库,由于OpenGL驱动版本众多,它大多数函数的位置都无法在编译时确定下来,需要在运行时查询。所以,我们为了解决运行时去正确调用opengl的接口,我们需要用到glad。封装的接口就是一个对opengl函数指针的封装。打开GLAD的在线服务(glad.dav1d.de),将语言(Language)设置为C/C++,在API选项中,选择3.3以上的OpenGL(gl)版本。之后将模式(Profile)设置为Core,并且保证选中了生成加载器(Generate a loader)选项。现在可以先(暂时)忽略扩展(Extensions)中的内容。都选择完之后,点击生成(Generate)按钮来生成库文件。

QT + opengl 环境搭建(glfw, glad),创建一个简单窗口_第1张图片

然后下载glad.zip。

二. Qt 配置相关库

        1.glad的配置

QT + opengl 环境搭建(glfw, glad),创建一个简单窗口_第2张图片

        2.glad.pri

INCLUDEPATH += $$PWD/include
SOURCES += \
    $$PWD/src/glad.c

        3.glfw3.3.9配置

     QT + opengl 环境搭建(glfw, glad),创建一个简单窗口_第3张图片

        4.glfw.pri

INCLUDEPATH += $$PWD/include
LIBS += -L$$PWD/lib -lglfw3

三.搭建QT工程。我们创建一个非QT的工程,看看相关的依赖库有哪些?

TEMPLATE = app
CONFIG += console c++17
CONFIG -= app_bundle
CONFIG -= qt

include($$PWD/../../thirdparty/glad/glad.pri)
include($$PWD/../../thirdparty/glfw-3.3.9/glfw.pri)

LIBS += -lopengl32 -lkernel32 -luser32 -lgdi32 -lshell32

SOURCES += \
        main.cpp

图中链接的相关库,opengl32,kernel32,user32,gdi32,shell32解决你编译发生的所有错误。vs下开发默认是继承的这些链接库,不用链接。

四.创建一个opengl窗口。

#include 
#include 
#include 
using namespace std;

void framebuffer_size_callback(GLFWwindow* window, int width, int height)
{
    glViewport(0, 0, width, height);
}

int main()
{
    // glad加载
    if(!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
    {
        std::cout << "failed to init glad!" << std::endl;
    }

    // 告知opengl我们使用的版本和渲染模式
    glfwInit();
    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

    // mac 下需要这句话
    glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
    // end

    // 创建opengl窗口
    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);
    // 等待用户关闭窗口
    while(!glfwWindowShouldClose(window))
    {
        // 双缓冲交换
        glfwSwapBuffers(window);
        // 响应各种交互事件
        glfwPollEvents();
    }
    // 释放资源
    glfwTerminate();
    return 0;
}

五.工程代码地址:learningOpengl: 一起学习opengl

六.学习地址:主页 - LearnOpenGL CN 

你可能感兴趣的:(opengl入门学习,qt,开发语言)