当前位置: 首页 > news >正文

LearnOpenGL01:创建项目

基于LearnOpenGL

相关链接:
工程搭建
hello window

环境

UBUNTU
GLFW3.3:负责创建窗口+处理输入
GLAD:根据不同操作系统加载不同的OPENGL函数实现

安装GLFW以及编译项

sudo apt update
sudo apt install cmake build-essential libglfw3-dev

根据不同版本配置对应的glad

配置链接
选择对应版本 将profile设置为Core以及勾选Generate a loader
点击gennerate会生成对应的zip,下载zip(里面的include和src放到项目目录下)
在这里插入图片描述

创建项目

目录结构
在这里插入图片描述

CMakeLists.txt

cmake_minimum_required(VERSION 3.24)
project(OGLTest)set(CMAKE_CXX_STANDARD 14)include_directories(include)# 查找GLFW库
find_package(PkgConfig REQUIRED)
pkg_search_module(GLFW REQUIRED glfw3)
# 貌似不引入头文件也行
include_directories(${GLFW_INCLUDE_DIRS})# include_directories和add_executable可以二选一
add_executable(OGLTestsrc/main.cpp src/glad.c)target_link_libraries(OGLTest ${GLFW_LIBRARIES})

main.cpp

#include "iostream"// 必须先include glad.h再include glfw
#include "glad/glad.h"
#include <GLFW/glfw3.h>// 窗口变化回调函数
void framebuffer_size_callback(GLFWwindow* window, int width, int height) {glViewport(0, 0, width, height);
}void processInput(GLFWwindow *window)
{// 按esc键就退出if(glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS)glfwSetWindowShouldClose(window, true);
}int main(void) {// 初始化GLFW库glfwInit();glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);// 创建窗口GLFWwindow* window = glfwCreateWindow(800, 600, "LearnOpenGL", NULL, NULL);if (window == nullptr) {std::cout << "failed to create window" << std::endl;glfwTerminate();return -1;}glfwMakeContextCurrent(window);// 注册窗口大小变化回调函数glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);// 调用任何OPENGL函数之前必须初始化GLAD// 给GLAD传入了用来加载系统相关的OpenGL函数指针地址的函数。// GLFW给我们的是glfwGetProcAddress,它根据我们编译的系统定义了正确的函数if (!gladLoadGLLoader((GLADloadproc) glfwGetProcAddress)) {std::cout << "Failed to initialize GLAD" << std::endl;return -1;}// 渲染循环while (!glfwWindowShouldClose(window)) {processInput(window);// 渲染指令// 使用自定义颜色清屏和清空屏幕的颜色缓存glClearColor(0.2f, 0.3f, 0.3f, 1.0f);glClear(GL_COLOR_BUFFER_BIT);// 交换颜色缓冲 : 了解双缓冲glfwSwapBuffers(window);// 检查有没有触发什么事件glfwPollEvents();}// 释放资源glfwTerminate();return 0;
}

知识点

GLAD的头文件必须在GLFW的头文件前面

在这里插入图片描述

窗口的尺寸以及坐标如何映射

在这里插入图片描述

双缓冲

在这里插入图片描述

相关文章:

LearnOpenGL01:创建项目

基于LearnOpenGL 相关链接&#xff1a; 工程搭建 hello window 环境 UBUNTU GLFW3.3&#xff1a;负责创建窗口处理输入 GLAD&#xff1a;根据不同操作系统加载不同的OPENGL函数实现 安装GLFW以及编译项 sudo apt update sudo apt install cmake build-essential libglfw3-…...

基于论文《大规模电动汽车充换电设施可调能力聚合评估与预测》开发者说明文档

real_data_model.m 开发者说明文档 脚本概述 本MATLAB脚本实现了基于论文《大规模电动汽车充换电设施可调能力聚合评估与预测》(鲍志远&#xff0c;胡泽春)中提出的预测模型和评估方法。脚本使用真实的充电数据、天气数据和分时电价数据&#xff0c;实现了LSTM与线性模型混合…...

优雅草星云智控系统产品发布会前瞻:SNMP协议全设备开启指南-优雅草卓伊凡

优雅草星云智控系统产品发布会前瞻&#xff1a;SNMP协议全设备开启指南-优雅草卓伊凡 一、发布会重磅预告 1.1 星云智控系统发布会详情 优雅草科技将于2024年5月15日在成都市双流区天府国际生物城会议中心举办”星云智控系统产品发布会“。作为优雅草科技CTO&#xff0c;卓伊…...

【Python】Pycharm中安装库可靠的方法

博主需要在pycharm中安装Python需要的库&#xff0c;发现可以通过两个方法&#xff0c;一个是在terminal中安装&#xff0c;如下图&#xff1a; 另一个&#xff0c;是通过软件包安装。 博主发现&#xff0c;保险起见&#xff0c;还是通过软件包安装会比较稳妥。博主遇见一个库&…...

探索Stream流:高效数据处理的秘密武器

不可变集合 stream流 Stream流的使用步骤&#xff1a; 先得到一条Stream流&#xff08;流水线&#xff09;&#xff0c;并把数据放上去 使用中间方法对流水线上的数据进行操作 使用终结方法对流水线上的数据进行操作 Stream流的中间方法 注意1&#xff1a;中间方法&#xff0…...

Debezium RelationalSnapshotChangeEventSource详解

Debezium RelationalSnapshotChangeEventSource详解 1. 类的作用与功能 1.1 核心功能 RelationalSnapshotChangeEventSource是Debezium中用于关系型数据库快照的核心抽象类,主要负责: 数据快照:对数据库表进行全量数据快照模式捕获:捕获数据库表结构事务管理:确保快照过…...

Open CASCADE学习|实现裁剪操作

1. 引言 Open CASCADE (简称OCC) 是一个功能强大的开源几何建模内核&#xff0c;广泛应用于CAD/CAM/CAE领域。裁剪操作作为几何建模中的基础功能&#xff0c;在模型编辑、布尔运算、几何分析等方面有着重要作用。本文将全面探讨Open CASCADE中的裁剪操作实现原理、应用场景及具…...

Microsoft Azure DevOps针对Angular项目创建build版本的yaml

Azure DevOps针对Angular项目创建build版本的yaml&#xff0c;并通过变量控制相应job的执行与否。 注意事项&#xff1a;代码前面的空格是通过Tab控制的而不是通过Space控制的。 yaml文件中包含一下内容&#xff1a; 1. 自动触发build 通过指定code branch使提交到此代码库的…...

Navicat 17最新保姆级安装教程(附安装包+永久使用方法)

前言 Navicat Premium 是一套可创建多个连接的数据库开发工具&#xff0c;让你从单一应用程序中同时连接 MySQL、MariaDB、MongoDB、SQL Server、Oracle、PostgreSQL 和 SQLite 。它与 OceanBase 数据库及 Amazon RDS、Amazon Aurora、Amazon Redshift、Microsoft Azure、Orac…...

在 Kotlin 中什么是委托属性,简要说说其使用场景和原理

在 Kotlin 中&#xff0c;属性委托和类委托是两种通过 by 关键字实现的强大特性&#xff0c;它们通过“委托”机制将行为或实现逻辑委托给其他对象&#xff0c;从而实现代码的复用和解耦。 1 属性委托 定义&#xff1a; 允许把属性的 get 和 set 方法的具体实现委托给另一个对…...

[Windows] 东芝存储诊断工具1.30.8920(20170601)

[Windows] 东芝存储诊断工具 链接&#xff1a;https://pan.xunlei.com/s/VOPpMjGdWZOLceIjxLNiIsIEA1?pwduute# 适用型号 东芝消费类存储产品&#xff1a; 外置硬盘&#xff1a;Canvio 系列 内置硬盘&#xff1a;HDW****&#xff08;E300 / N300 / P300 / S300 / V300 / X30…...

按位段拼接十六进制

需求&#xff1a; 给一组位段及对应的值&#xff0c;拼接出该十六进制值。 如&#xff0c; [15] : 0x1 [31:16] : 0xfafa [14:1] : 0x1af0 [0:0] : 0x1 def parse_range(range_str):"""解析位段字符串&#xff0c;返回高位和低位"""parts…...

FPGA 41 ,ICMP 协议详细解析之构建网络诊断系统( ICMP 协议与 IP 协议理论详细解析 )

目录 前言 一、ICMP协议介绍 1.1 ICMP协议介绍 1.2 ICMP报文格式 1.3 ICMP地位流程 1.4 为何需要ICMP差错报文 1.5 协议关系 二、FPGA 与 ICMP 2.1 平台选择与环境搭建 2.2 模块化设计 2.3 ICMP 功能设计 &#xff08;1&#xff09;ICMP 报文解析 &#xff08;2&am…...

每天批次导入 100 万对账数据到 MySQL 时出现死锁

一、死锁原因及优化策略 1.1 死锁原因分析 批量插入事务过大&#xff1a; Spring Batch 默认将整个 chunk&#xff08;批量数据块&#xff09;作为一个事务提交&#xff0c;100 万数据可能导致事务过长&#xff0c;增加锁竞争。 并发写入冲突&#xff1a; 多个线程或批处理作…...

滑动窗口-窗口中的最大/小值-单调队列

求窗口的最大值 #include <iostream> //滑动窗口最大值用单调队列q[]&#xff0c;q存储候选最大值的下标 //队列头是最大值的下标 using namespace std; const int N100010; int nums[N],q[N]; int hh0,tt-1;// hh 是队头指针&#xff0c;tt 是队尾指针&#xff0c;初始…...

Docker Compose 部署 MeiliSearch 指南

Docker Compose 部署 MeiliSearch 指南 目录 环境准备创建 MeiliSearch 配置文件启动 MeiliSearch 服务验证服务状态访问 MeiliSearch安全及防火墙设置...

在 MyBatis 中实现控制台输出 SQL 参数

在 MyBatis 中实现控制台输出 SQL 参数&#xff0c;可通过以下方案实现&#xff1a; # 一、使用 MyBatis-Plus 的 SqlLogInterceptor&#xff08;推荐&#xff09; ‌适用场景‌&#xff1a;项目已集成 MyBatis-Plus&#xff08;3.5.3版本&#xff09; ‌配置步骤‌&#xff…...

【MySQL】数据库、数据表的基本操作

个人主页&#xff1a;Guiat 归属专栏&#xff1a;MySQL 文章目录 1. MySQL基础命令1.1 连接MySQL1.2 基本命令概览 2. 数据库操作2.1 创建数据库2.2 查看数据库2.3 选择数据库2.4 修改数据库2.5 删除数据库2.6 数据库备份与恢复 3. 表操作基础3.1 创建表3.2 查看表信息3.3 创建…...

Java中的内部类详解

目录 什么是内部类&#xff1f; 生活中的内部类例子 为什么需要内部类&#xff1f; 生活中的例子 内部类的存在意义 内部类的分类 1. 成员内部类 什么是成员内部类&#xff1f; 成员内部类的特点 如何使用成员内部类&#xff1f; 成员内部类访问外部类同名成员 2. …...

【LangChain全栈开发指南】从LLM集成到智能体系统构建

目录 &#x1f31f; 前言&#x1f3d7;️ 技术背景与价值&#x1f4a2; 当前技术痛点&#x1f6e0;️ 解决方案概述&#x1f465; 目标读者说明 &#x1f50d; 一、技术原理剖析&#x1f4ca; 核心概念图解&#x1f4a1; 核心作用讲解&#x1f9e9; 关键技术模块说明⚖️ 技术选…...

《内存单位:解锁数字世界的“度量衡”》

&#x1f680;个人主页&#xff1a;BabyZZの秘密日记 &#x1f4d6;收入专栏&#xff1a;C语言 &#x1f30d;文章目入 一、基础单位&#xff1a;字节&#xff08;Byte&#xff09;二、进阶单位&#xff1a;千字节&#xff08;KB&#xff09;、兆字节&#xff08;MB&#xff09…...

Spring Boot + MyBatis-Plus 高并发读写分离实战

引言 在高并发场景下&#xff0c;单一数据库实例往往成为性能瓶颈。数据库读写分离通过将读操作和写操作分配到不同的数据库实例&#xff0c;有效缓解主库压力&#xff0c;提升系统吞吐量。MyBatis-Plus 作为一款强大的持久层框架&#xff0c;结合 Spring Boot 能够轻松实现读…...

STC32G12K128-旋转编码器-软件去抖

STC32G12K128-旋转编码器-软件去抖 简介代码 简介 EC11旋转编码器是一种可以连续旋转的器件A,B,C为旋转编码引脚&#xff0c;带按键的有D,E引脚。引脚功能&#xff1a; A&#xff1a;编码器A相&#xff1b;B&#xff1a;编码器B相&#xff1b;C&#xff1a;公共端-一般接到GN…...

第J7周:对于ResNeXt-50算法的思考

目录 思考 一、代码功能分析 1. 构建 shortcut 分支&#xff08;残差连接的旁路&#xff09; 2. 主路径的第一层卷积&#xff08;11&#xff09; 4. 主路径的第三层卷积&#xff08;11&#xff09; 5. 残差连接 激活函数 二、问题分析总结&#xff1a;残差结构中通道数不一致的…...

古方焕新潮!李良济盒马联名养生水,以创新赋能中式养生新潮流

今天下午&#xff0c;中华老字号李良济与新零售巨头盒马联名的“五汁饮&暑清元气水”新品发布会&#xff0c;在李良济隆重举行。 新品发布会上&#xff0c;盒马与多家媒体齐聚李良济&#xff0c;通过中医文化体验、新品品鉴、生产全链路探秘、媒体采访等环节&#xff0c;不…...

使用PyTorch训练马里奥强化学习代理的完整指南

以下是使用PyTorch训练马里奥强化学习代理的完整指南&#xff0c;涵盖依赖库配置、环境搭建、核心代码实现及输出结果分析&#xff0c;结合关键优化策略与实战经验。 一、依赖库配置 基础环境安装 # 使用Anaconda创建虚拟环境&#xff08;推荐&#xff09; conda create -n m…...

STM32F103RCT6 + MFC实现网口设备搜索、修改IP、固件升级等功能

资源下载链接:https://download.csdn.net/download/qq_35831134/90712875?spm=1001.2014.3001.5501 一.大概逻辑: // 网口搜索大概逻辑: // ************************************************************************** // 一.环境: // 上位机用MFC下位机用STM32F103R…...

ch09 课堂参考代码

ch09 拓扑排序与基环树 拓扑排序 在一些场景中&#xff0c;需要完成一系列事情&#xff0c;这些事情之间有顺序关系或者依赖关系&#xff0c;在做一件事情之前必须先做另一件事&#xff0c;例如课程学习的先后顺序&#xff0c;这类问题可以抽象为图论中的拓扑排序问题。 拓扑…...

Day 15 训练

Day 15 对鸢尾花数据集进行处理&#xff0c;特征可视化&#xff0c;贝叶斯优化随机森林&#xff0c;Shap解释1. 导入必要的库2. 设置中文字体3. 加载数据集4. 查看数据5. 数据准备6. 贝叶斯优化随机森林7. 评估结果8. 绘制箱形图9. 绘制特征相关性热力图10. SHAP模型解释总结 对…...

Path to Integer_ABC402分析与解答

考虑怎么降低复杂度&#xff0c;使用分治策略降低搜索的复杂度。 对于a_i,j&#xff0c;其一定在最后结果数的第(2n-i-j)位&#xff08;如果将最低位看成第0位&#xff09;&#xff0c;故将a_i,j看成a_i,j * 10^(2n-i-j)&#xff0c;这样每次加上a_i,j就可以了。 从(1,1)到(n…...

嵌入式学习笔记 - 关于结构体成员地址对齐问题

一 在没有#pragma pack&#xff08;&#xff09;这个宏声明的情况下 C语言中结构体成员分配内存大小时需要满足2个条件&#xff0c;这也是内存对齐的原则&#xff1a; ①每个成员变量的起始地址必须为其数据类型所占空间大小的整数倍 ②结构体所占空间总大小为其最大数据类…...

JAVA实战开源项目:健身房管理系统 (Vue+SpringBoot) 附源码

本文项目编号 T 180 &#xff0c;文末自助获取源码 \color{red}{T180&#xff0c;文末自助获取源码} T180&#xff0c;文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…...

升级element-ui步骤

1 执行 cnpm uninstall element-ui 删除element-ui依赖2 执行 cpm install element-ui -S 安装最新的element-ui&#xff0c;并加入到packjson中3 在element-ui中生成主题&#xff0c;并将主题文件加入到element-ui-theme中。删除所有旧版本到主题文件 *4 修改element-ui-theme…...

Dp通用套路(闫式)

闫式dp分析法&#xff1a; 从集合角度来分析DP问题。 核心思想&#xff1a; DP是一种求有限集中的最值或者个数问题 由于集合中元素的数量都是指数级别的&#xff0c;直接用定义去求&#xff0c;把每种方案都用dfs暴力枚举一遍&#xff0c;时间复杂度很高&#xff0c;此时用…...

如何删除豆包本地大模型

由于无法选择大模型的安装位置&#xff0c;因此会占用C盘大量空间&#xff0c;然后又找到不卸载的地方&#xff0c;经排查豆包大模型安装位为&#xff1a;C:\Users\[当前电脑用户]\AppData\Local\Doubao\User Data&#xff0c;只能进行手动卸载。...

在ISOLAR A/B 工具使用UDS 0x14服务清除单个DTC故障的配置

在ISOLAR A/B 工具使用UDS 0x14服务清除单个DTC故障的配置如下图所示 将DemClearDTCLimitation参数改成DEM_ALL_SUPPORTED_DTCS 此时0x14 服务就可以支持单个DTC的故障清除&#xff0c; 如果配置成 DEM_ONLY_CLEAR_ALL_DTCS 则只能够用0x14服务清楚所有DTC。...

Linux59 SSH配置前瞻 JumpServer双网卡ping通

为什么Ping这个IP地址Ping得通 本地址 [rootlocalhost network-scripts]# cat ifcfg-ens33 iTYPEEthernet BOOTPROTOnone DEFROUTEyes DEVICEens33 ONBOOTno IPADDR192.168.235.4 NETMASK255.255.255.0 GATEWAY192.168.235.2 DNS1114.114.114.114 [rootlocalhost network-scrip…...

TensorFlow中数据集的创建

目录 前言示例示例1示例2示例3示例4 前言 TensorFlow 的 tf.data.Dataset API 提供了一种灵活且高效的方式来加载和预处理数据。它可以轻松处理大规模数据集&#xff0c;并支持多种数据源格式。 所有数据集相关的内容都在tf.data中&#xff0c;from_tensor_slices&#xff1a;…...

OpenHarmony SystemUI开发——实现全局导航栏和状态栏关闭

在实际生产中&#xff0c;进场遇到需要关闭导航栏和状态栏的需求&#xff0c;现分享解决办法&#xff1a; 开发环境 OpenHarmony 5.0.0r 代码分析 思路&#xff1a; launcher本身可以关闭 导航栏&#xff08;实际是 公共事件&#xff0c;发送消息给systemUI来实控制&#x…...

机器视觉的平板电脑屏幕组件覆膜应用

在现代智能制造业中&#xff0c;平板电脑屏幕组件覆膜工序是确保产品外观和功能完整性的重要环节。随着技术的进步&#xff0c;传统的覆膜方式已经无法满足高速度、高精度的生产需求。而MasterAlign视觉系统的出现&#xff0c;将传统覆膜工艺转变为智能化、自动化的生产流程。在…...

Windows 10 无法启动或黑屏的修复指南(适用于更新失败或磁盘故障)

Windows 10 无法启动或黑屏的修复指南&#xff08;适用于更新失败或磁盘故障&#xff09; 当 Windows 10 突然无法启动&#xff08;黑屏、无限重启、更新失败后断电等情况&#xff09;&#xff0c;很可能是由于启动引导程序损坏或系统映像异常&#xff08;如系统磁盘出现坏道&…...

AI星智协脑:智能驱动的高效协作管理平台全解读

前言 想象一下&#xff1a;早上刚开电脑&#xff0c;十几条未读消息如机关枪般扫射而来&#xff0c;各路任务像陨石雨一样砸向你&#xff0c;会议排得比热播剧还密集&#xff0c;文档版本堪比宫斗剧剧情反转&#xff0c;同事围着你转圈追KPI&#xff0c;活脱脱一场《职场大逃杀…...

WebSocket:实时通信的新时代

在现代Web应用中&#xff0c;实时通信变得越来越重要。传统的HTTP协议虽然能够满足基本的请求-响应模式&#xff0c;但在需要频繁更新数据的场景下&#xff0c;其效率和性能显得捉襟见肘。WebSocket协议应运而生&#xff0c;它提供了一种在单个TCP连接上进行全双工通信的机制&a…...

NetSuite Saved Search如何在Criteria中利用Expressions处理不同Transaction之间的关系?

最近有几个Saved Search都用到了Criteria中的Use Expressions的参数&#xff0c;具体的场景是我们想要对不同的Transaction Type做出不同条件的限定&#xff0c;这里有两个不同的举例。 1.除了ER类型头和行的内容要根据实际取&#xff0c;其余所有Transaction类型都取头信息&a…...

2025年 全新 AI 编程工具 Cursor 安装使用教程

一、Cursor 软件下载 首选&#xff0c;登录Cursor官网&#xff0c;进行软件下载&#xff0c;官网下载地址如下&#xff1a; Cursor AI IDE 下载 二、Cursor软件安装配置 此处以Windows10系统安装为例&#xff0c;下载完成之后&#xff0c;右键安装包&#xff0c;以管理员身份…...

跨平台编码规范文档

1. 引言 1.1 目的与范围 本编码规范旨在为软件开发团队提供统一的代码编写标准&#xff0c;以提高代码质量、可维护性和团队协作效率。适用于使用C#、Java、安卓和Web前端&#xff08;HTML/CSS/JavaScript/TypeScript&#xff09;的项目开发&#xff0c;不针对特定语言特性&a…...

Spring创建的线程池

在自动审核的方法上加上Async注解&#xff08;标明要异步调用&#xff09; Async//异步方法调用public void audit(WmNews wmNews) {//这个方法处理时间很长&#xff0c;单体异步思想&#xff0c;线程池}在自媒体引导类中使用EnableAsync注解开启异步调用 SpringBootApplicati…...

【深度学习新浪潮】苹果在显示算法技术上的研发进展调研

苹果的显示算法技术研发呈现三大趋势:AI深度整合(如HDR增强、动态校准)、多模态环境感知(光、温湿度、生物特征)、软硬件协同优化(芯片、传感器、算法深度耦合)。 一、动态刷新率与功耗管理 1. ProMotion技术的算法升级 技术修正: 像素级功耗管理:iPhone 13系列的Pr…...

图像画质算法记录(前言)

一、背景介绍 本篇主要是对图像画质增强相关&#xff0c;进行简单整理和记录。 二、整体流程 整体效果主要受到两部分影响&#xff1a; 1、前端isp处理。 2、后端画质增强。 三、isp常规流程 可以参考&#xff1a;刘斯宁&#xff1a;Understanding ISP Pipeline 四、后端画质…...

uniapp-商城-47-后台 分类数据的生成(通过数据)

在第46章节中&#xff0c;我们为后台数据创建了分类的数据表结构schema&#xff0c;使得可以通过后台添加数据并保存&#xff0c;同时使用云函数进行数据库数据的读取。文章详细介绍了如何通过前端代码实现分类管理功能&#xff0c;包括获取数据、添加、更新和删除分类。主要代…...