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)按钮来生成库文件。

然后下载glad.zip。

二. Qt 配置相关库

        1.glad的配置

        2.glad.pri

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

        3.glfw3.3.9配置

     

        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 <iostream>
#include <glad/glad.h>
#include <GLFW/glfw3.h>
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 

相关推荐

  1. jEasyUI 创建简单窗口

    2024-01-30 15:04:03       24 阅读
  2. 一个简单的springboot应用过程

    2024-01-30 15:04:03       20 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-30 15:04:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-30 15:04:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-01-30 15:04:03       82 阅读
  4. Python语言-面向对象

    2024-01-30 15:04:03       91 阅读

热门阅读

  1. 大模型-文本扩展&聊天机器人

    2024-01-30 15:04:03       72 阅读
  2. 【美团】无人机-大数据开发工程师

    2024-01-30 15:04:03       56 阅读
  3. css 让 width = (100% - 30px)

    2024-01-30 15:04:03       63 阅读
  4. udp(无连接)客户端和服务端代码

    2024-01-30 15:04:03       68 阅读
  5. 快捷键:IDEA 清理无效导入依赖

    2024-01-30 15:04:03       54 阅读
  6. STL之stack 【栈】

    2024-01-30 15:04:03       55 阅读
  7. VA_LIST可变参数列表使用学习

    2024-01-30 15:04:03       53 阅读
  8. 正则表达式 grep

    2024-01-30 15:04:03       52 阅读