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

news2024/11/17 1:39:37

一.下载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 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1423571.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot 结合 liteflow 规则引擎使用

1、前言 在日常的开发过程中&#xff0c;经常会遇到一些串行或者并行的业务流程问题&#xff0c;而业务之间不必存在相关性。 在这样的场景下&#xff0c;使用策略和模板模式的结合可以很好的解决这个问题&#xff0c;但是使用编码的方式会使得文件太多,在业务的部分环节可以…

15EG使用vivado2023.1建立hello world工程

1:打开软件建立工程 2:使用vivado创建设计模块并生成bit文件 3:导出硬件平台&#xff0c;使用vitis建立工程 4:使用vitis创建应用程序项目 5:硬件设置与调试 1:打开软件建立工程 打开VIVADO2023.1 创建一个新的工程 输入项目名称和地址&#xff0c;下面那个选项为是否…

Web开发7:Git版本控制

在开发中&#xff0c;版本控制是一个不可或缺的工具。它能够帮助开发者跟踪和管理代码的变化&#xff0c;协同工作&#xff0c;并且有效地处理代码的冲突。其中&#xff0c;Git是最流行和广泛使用的版本控制系统之一。在本篇文章中&#xff0c;我们将深入探讨Git版本控制的基础…

2024年,AI 掀起数据与分析市场的新风暴

2024 年伊始&#xff0c;Kyligence 联合创始人兼 CEO 韩卿在其公司内部的飞书订阅号发表了多篇 Rethink Data & Analytics 的内部信&#xff0c;分享了对数据与分析行业的一些战略思考&#xff0c;尤其是 AI 带来的各种变化和革命&#xff0c;是如何深刻地影响这个行业乃至…

基于SSM的高校班级同学录网站设计与实现(有报告)。Javaee项目,ssm项目。

演示视频&#xff1a; 基于SSM的高校班级同学录网站设计与实现&#xff08;有报告&#xff09;。Javaee项目&#xff0c;ssm项目。 项目介绍&#xff1a; Javaee项目&#xff0c;采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&…

leetcode 28.找出字符串中第一个匹配项的下标(python版)

需求 给你两个字符串 haystack 和 needle &#xff0c;请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标&#xff08;下标从 0 开始&#xff09;。 如果 needle 不是 haystack 的一部分&#xff0c;则返回 -1 。 示例 1&#xff1a; 输入&#xff1a;haystack…

网工内推 | 网络安全工程师专场,大平台,六险一金

01 汽车之家 招聘岗位&#xff1a;高级网络安全工程师 职责描述&#xff1a; 1、负责公司网站、系统与产品的漏洞扫描、渗透测试与安全评估工作&#xff1b; 2、负责公司安全系统与安全设备的运维&#xff0c;负责公司网络安全监控管理&#xff1b; 3、负责公司安全事件的应急…

FileZilla 的安装与使用

目录 一. FileZilla 是什么二. FileZilla 的安装1. 下载 FileZilla2. 安装 三. FileZilla 的使用 一. FileZilla 是什么 FileZilla 是一个免费的开源 FTP&#xff08;文件传输协议&#xff09;客户端软件&#xff0c;用于在计算机之间传输文件。它提供了一个直观的用户界面&am…

sql注入,布尔盲注和时间盲注,无回显

布尔盲注 通过order by分组可以看到&#xff0c;如果正确会i显示you are in&#xff0c;错误则无任何提示&#xff0c;由此可以判断出&#xff0c;目前只显示对错&#xff0c;此外前端不会显示任何数据 也就是说&#xff0c;目前结果只有两种&#xff0c;在这种只有两种变量的…

Unity 自动轮播、滑动轮播

如图所示&#xff0c;可设置轮播间隔&#xff0c;可左右滑动进行轮播 1.在UGUI创建个Image&#xff0c;添加自动水平组件 2.添加并配置脚本 3.代码如下&#xff0c;都有注释 using UnityEngine; using UnityEngine.UI;public class IndicatorManager : MonoBehaviour {public …

鸿蒙不再兼容安卓,那么鸿蒙开发者是否会大增?

华为的纯血版鸿蒙已出现。紧接着各大厂商都纷纷加入原生应用开发当中&#xff0c;其中包括支付宝、京东、美团等一线大厂&#xff0c;200 多应用厂商正在加速开发鸿蒙原生应用。鸿蒙生态设备数量仅历时 5 个月即从 7 亿增长至 8 亿。 而鸿蒙的开发不止应用层&#xff0c;它是以…

6.3 内存池模式

Bruce Powel Douglass大师介绍-CSDN博客https://blog.csdn.net/ChatCoding/article/details/134665868嵌入式软件开发从小工到专家-CSDN博客https://blog.csdn.net/ChatCoding/article/details/135297955C嵌入式编程设计模式源码-CSDN博客https://blog.csdn.net/ChatCoding/art…

根文件系统之initramfs

问题抛出&#xff1a; 1.系统启动时文件系统功能的实现 1.bootloader支持 1.uboot启动 ——典型的arm设备的选择。 情景1&#xff1a;使用initrd或initramfs&#xff0c;内核和根文件系统作为不同镜像时&#xff0c;uboot负责提供启动参数&#xff1b;加载根文件系统到内存…

C++ 设计模式之解释器模式

【声明】本题目来源于卡码网&#xff08;卡码网KamaCoder&#xff09; 【提示&#xff1a;如果不想看文字介绍&#xff0c;可以直接跳转到C编码部分】 【设计模式大纲】 【简介】 --什么是解释器模式&#xff08;第22种设计模式&#xff09; 解释器模式&#xff08;Interpreter…

【INTEL(ALTERA)】带有浮点单元 (FPU) Nios® V/g 处理器在 英特尔® Cyclone10 GX 设备中执行不正确的浮点运算

说明 由于 英特尔 Quartus Prime Pro Edition 软件版本 23.3 存在一个问题&#xff0c;当使用 Nios V/g 处理器并在 英特尔 Cyclone 10 GX 设备中启用 FPU 时&#xff0c;浮点运算无法按预期进行。 Nios V/g 处理器 – 启用浮点单元 解决方法 请勿在 英特尔 CycloneNios 10 G…

张维迎《博弈与社会》笔记(2)导论:个体理性与社会最优:协调与合作问题

有节选&#xff0c;相当于按照自己的方式将内容组织了下吧&#xff1f; 协调与合作问题 什么是一个社会面临的基本问题&#xff1f; 这似乎是一个我们每一个人都可以触摸得到但又难以说清的问题&#xff0c;因为在不同的语境下&#xff0c;“社会”一词的内涵有所差异。但其基…

火山引擎ByteHouse:分析型数据库如何设计并发控制?

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 分析型数据库设计并发控制的主要原因是为了确保数据的完整性和一致性&#xff0c;同时提高数据库的吞吐量和响应速度。并发控制可以防止多个事务同时对同一数据进行…

ICMPv6报文解析及NAT处理

ICMPv6报文概述 参考RFC4443和RFC2460 ICMPv6报文是IPv6在internal control management protocol&#xff08;ICMP&#xff09;的基础之上做了一些改动&#xff0c;得到了ICMPv6协议&#xff0c;IPv6的next_header为58。 Message general format 每条ICMPv6消息之前都有一个…

从零开始的OpenGL光栅化渲染器构建6-PBR光照模型

前言 PBR&#xff0c;或者基于物理的渲染(Physically Based Rendering)&#xff0c;它指的是一些在不同程度上都基于与现实世界的物理原理更相符的基本理论所构成的渲染技术的集合。正因为基于物理的渲染目的便是为了使用一种更符合物理学规律的方式来模拟光线&#xff0c;因此…

Mybatis 源码系列:领略设计模式在 Mybatis 其中的应用

文章目录 一、Builder模式二、工厂模式三、单例模式四、代理模式五、组合模式六、模板方式模式七、适配器模式八、装饰器模式九、迭代器模式 虽然我们都知道有23种设计模式&#xff0c;但是大多停留在概念层面&#xff0c;真实开发中很少遇到&#xff0c;Mybatis源码中使用了大…