VS2022配置OpenGL+GLAD
Glew(The OpenGL Extension Wrangler Library)是对底层OpenGL接口的封装,可以让你的代码跨平台。Glad与Glew作用相同,可以看作它的升级版。
Freeglut(OpenGL Utility Toolkit)主要用于创建并管理窗口和OpenGL上下文、处理手柄、键盘、鼠标输入的功能等。Glfw(Graphics Library Framework)则是Freeglut升级版。
通常来说Glad与Glfw配合使用。
我打算配合使用OpenGL和GDAL来读取和处理TIF图像,至于原因呢,可以看下ChatGPT的回答哈哈
GDAL和OpenGL配合读取TIF的一般步骤如下:
将GDAL和OpenGL结合使用可以实现在OpenGL中读取和渲染TIF影像,从而实现在图形界面中显示地理空间影像的功能。以下是一般的步骤:
-
使用GDAL库读取TIF影像,获取影像的数据和元信息,如影像宽度、高度、像素类型、地理空间坐标信息等。可以参考前面提供的GDAL读取TIF影像的示例代码。
-
将GDAL读取的影像数据传递给OpenGL,可以通过创建OpenGL纹理(Texture)来加载影像数据。可以使用OpenGL的纹理映射(Texture Mapping)功能,将影像数据映射到OpenGL的纹理对象上。可以使用OpenGL的API来创建纹理对象、设置纹理参数、加载影像数据到纹理对象等。
-
在OpenGL的渲染循环中,通过使用纹理对象将TIF影像渲染到OpenGL的窗口或画布上。可以使用OpenGL的2D或3D绘制功能,将纹理对象作为纹理贴图(Texture Mapping)应用到OpenGL的几何图形上,从而将影像渲染到屏幕上。
优势在哪里?
结合使用GDAL和OpenGL可以实现在图形界面中实时渲染和显示地理空间影像的功能,相比单独使用GDAL,有以下一些优势:
-
实时渲染:使用OpenGL可以在实时渲染的环境中显示地理空间影像,可以实时查看和交互地理空间数据,如放大、缩小、旋转、平移等操作,提供更直观的用户体验。
-
3D渲染:OpenGL支持3D渲染,可以将地理空间影像渲染到3D模型上,实现更复杂的三维地理可视化效果,如地形、建筑物等的渲染。
-
硬件加速:OpenGL利用图形硬件加速渲染,可以充分利用计算机的GPU资源,提供高性能的渲染速度,特别是对于大尺寸高分辨率的地理空间影像,可以实现实时渲染的效果。
-
图形界面交互:结合OpenGL可以实现更丰富的图形界面交互,如使用鼠标、键盘等输入设备进行用户交互,例如选择、标注、测量等操作,提供更灵活和便捷的用户操作。
-
可扩展性:OpenGL作为一种跨平台的图形渲染库,可以在多种操作系统和硬件平台上运行,具有较好的可扩展性,可以方便地与其他图形库或工具进行集成,实现更复杂的地理信息系统(GIS)应用。
综上所述,结合使用GDAL和OpenGL可以充分发挥二者的优势,实现更强大和灵活的地理空间影像渲染和显示功能。
2023/4/23补充:VS2022+GDAL已经配置好了,教程如下
VS2022配置GDAL_程序员班长的博客-CSDN博客
有同学可能要问了,GDAL和GLAD是什么区别?
Glad和GDAL是两个不同的库,它们在功能和用途上有明显的区别。
-
Glad是一个用于管理和加载OpenGL函数指针的C/C++库。它可以生成用于加载OpenGL函数的代码,从而允许开发者在OpenGL应用程序中使用最新的OpenGL功能。Glad提供了简单的、跨平台的方法来加载和管理OpenGL函数指针,以便开发者可以方便地使用OpenGL的各种功能。
-
GDAL(Geospatial Data Abstraction Library)是一个开源的、跨平台的库,用于处理和处理地理空间数据。GDAL支持许多地理空间数据格式,如栅格数据(如遥感图像、DEM等)和矢量数据(如矢量地图、矢量数据集等)。GDAL提供了丰富的功能,包括数据读取、写入、转换、处理、投影变换等,可以用于访问、处理和分析各种地理空间数据。
在区别和联系方面,可以总结如下:
-
功能:Glad用于加载和管理OpenGL函数指针,以便在OpenGL应用程序中使用最新的OpenGL功能。GDAL用于处理和处理地理空间数据,支持多种地理空间数据格式。
-
用途:Glad主要用于图形编程中的OpenGL应用程序,而GDAL主要用于地理空间数据处理和分析,如GIS(地理信息系统)、遥感、地图制图等应用。
-
领域:Glad主要在计算机图形和游戏开发领域中使用,而GDAL主要在地理空间信息领域中使用。
-
跨平台支持:Glad是一个跨平台的库,可以在多个操作系统上使用,包括Windows、macOS、Linux等。GDAL同样也是一个跨平台的库,可以在多个操作系统上使用,并且对于地理空间数据格式的支持相对较全面。
总的来说,Glad用于加载和管理OpenGL函数指针,用于图形编程中的OpenGL应用程序;而GDAL用于处理和处理地理空间数据,主要用于地理空间信息领域。选择使用哪个库取决于你的具体需求和应用领域。
VS2022配置OpenGL+GLAD教程如下
一、需要下载安装的环境及工具
1、Visual Studio 2022 professional
Visual Studio: 面向软件开发人员和 Teams 的 IDE 和代码编辑器
Visual Studio: 面向软件开发人员和 Teams 的 IDE 和代码编辑器
下载安装并进行激活(激活码请自行获取,本教程不提供)。
2、GLFW
Download | GLFW

下载Source package,下载完成后将压缩包解压,备用。
3、Glad
https://glad.dav1d.de/
这里gl的版本需要选version 3.3以上,机器配置够好甚至可以拉满,这里以version 4.0为例。

然后下载生成的压缩包

(1)下载完成后将压缩包解压。
(2)任意找一个地方新建文件夹,注意不能有中文路径。将上述解压的glfw与glad文件夹放到此新建的文件夹中。
例如我的文件夹是C:\OpenGL,文件夹内容如下

4、CMake
Download | CMake
下载安装,安装选项全部默认即可。
二、配置环境
1、准备工作
在glfw-3.3.8文件夹中新建build文件夹。

2、编译GLFW源文件
(1)打开CMake。
(2)点击“Browse Source”按钮,找到OpenGL文件夹中的glfw-3.3.8文件夹并选择。再点击“Browse Build”按钮选择glfw-3.3.8文件夹中你刚才新建的build目录。之后点击“Configure”按钮。

(3)此时会弹出一个对话框,选择你需要的编译器即Visual Studio 2022,其他地方不需改动,然后点击“finish”按钮即可。
(4)等待配置完成即通知栏出现“Configuring done”后,点击“Generate”按钮。
(5)生成成功后通知栏会出现“Generating done”字样,并且build文件夹会出现若干文件及文件夹,此时可关闭CMake。
(6)使用Visual Studio 2022打开build中的GLFW.sln工程文件。

(7)点击“生成解决方案”按钮,等待对话框中提示全部生成成功后,关闭Visual Studio 2022。

3、配置Visual Studio 2022目录
(1)重新打开Visual Studio 2022,点击创建新项目,新建一个C++空项目(或者打开已有项目)。
(2)Debug选x64的,然后在解决方案名称上点击右键,点击“属性”(注意不是解决方案四个字那里右键)。
(3)点击“VC++目录”,在右侧的包含目录点击下拉箭头点击“编辑”。

(4)复制并进入计算的值下面的第一个路径,我的为“C:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\14.35.32215\include”。

(5)打开OpenGL文件夹,将C:\OpenGL\glfw-3.3.8\include的GLFW文件夹以及C:\OpenGL\glad-4.0\include的glad和KHR文件夹复制到刚才打开的C:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\14.35.32215\include文件夹中。
(6)还是在VC++目录中,在右侧的库目录点击下拉箭头点击“编辑”。复制并进入计算的值下面的第一个路径,我的为“C:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\14.35.32215\lib\x64”。
(7)打开OpenGL文件夹,将C:\OpenGL\glfw-3.3.8\build\src\Debug的glfw3.lib文件复制到刚才打开的C:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\14.35.32215\lib\x64文件夹中。

4、配置Visual Studio 2022链接器
(1)点击VC++目录下面的“链接器”中的“输入”,在右侧的附加依赖项点击下拉箭头点击“编辑”。

(2)添加“glfw3.lib”以及“opengl32.lib”。

最后,点击确定即可。
三、测试环境
(1)将C:\OpenGL\glad-4.0\src中的glad.c文件添加到你刚才新建的Visual Studio 2022空项目中,并新建test.cpp文件。

(2)将下面的代码复制到test.cpp文件中。
#include <glad/glad.h>
#include <GLFW/glfw3.h>#include <iostream>void framebuffer_size_callback(GLFWwindow* window, int width, int height);
void processInput(GLFWwindow *window);// settings
const unsigned int SCR_WIDTH = 800;
const unsigned int SCR_HEIGHT = 600;int main()
{// 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(SCR_WIDTH, SCR_HEIGHT, "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);// glad: load all OpenGL function pointers// ---------------------------------------if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)){std::cout << "Failed to initialize GLAD" << std::endl;return -1;} // render loop// -----------while (!glfwWindowShouldClose(window)){// input// -----processInput(window);// render// ------glClearColor(0.2f, 0.3f, 0.3f, 1.0f);glClear(GL_COLOR_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);
}
(3)点击本地Windows调试器,出现一个空的OpenGL画布,配置成功。

相关文章:
VS2022配置OpenGL+GLAD
Glew(The OpenGL Extension Wrangler Library)是对底层OpenGL接口的封装,可以让你的代码跨平台。Glad与Glew作用相同,可以看作它的升级版。 Freeglut(OpenGL Utility Toolkit)主要用于创建并管理窗口和Ope…...
javascript for循环的定义
循环代码可以执行指定的次数 不同类型的循环: javascript支持不同类型的循环 for-循环代码块的一定次数 for/in-循环遍历对象的属性 while-当指定的条件为true时循环指定的代码块 do/while-当指定的条件为true时循环指定的代码块 for循环的语法: …...
【安全与风险】安全研究的新课题
安全研究的新课题 第一部分 主题概述和普适计算目的两种类型的研究人员从事安全和隐私研究关注重点更大的愿景:普适计算什么是普适/泛在计算?普及计算推动者第一个推动者:传感器/执行器例1:无线电传感器例2:RFIDs(“智能标签”)例3:Crowdsensing:实现大规模泛在感知 第二个推动…...
4核8G云服务器腾讯云CVM S5和轻量应用服务器性能差异?
腾讯云4核8G云服务器可以选择轻量应用服务器或CVM云服务器标准型S5实例,轻量4核8G12M服务器446元一年,CVM S5云服务器935元一年,相对于云服务器CVM,轻量应用服务器性价比更高,轻量服务器CPU和CVM有区别吗?性…...
【对比】文心一言对飚ChatGPT实操对比体验
前言 🍊缘由 百度【文心一言】体验申请通过 本狗中午干饭时,天降短信,告知可以体验文心一言,苦等一个月的实操终于到来。心中这好奇的对比心理油然而生,到底是老美的【ChatGPT】厉害,还是咱度娘的【文心一…...
C++:Article:链接器(二):符号决议
链接器 1. C源文件都有些什么1.1 . 目标文件里有什么 2. 符号表 Symbol table2.1. 符号表的位置2.2. 符号的决议2.3. 符号决议过程 3. 实例说明3.1. 意外出现3.2 总结排查 在上篇文章中,我们介绍了 链接器基本概念,我们知道所有的应用程序否是连接器将所…...
期权价格上下限与期权平价关系
目录 1. 期权的基本概念 2. 期权的上下限 3. 期权的平价关系 1. 期权的基本概念 期权:是一种选择权,期权买方向卖方支付一定数额的 期权费 后,可获得在 一定时间(到期日)内以 一定价格(执行价格&#x…...
QT中TCP的学习
文章目录 qt中TCP的实现 qt中TCP的实现 学习视频 QT中可以通过TCP协议让服务器和客户端之间行通信。服务器和客户端的具体流程 下方的信号都是系统提供的,我们只需要写相应的槽函数 A、服务器: 创建QTcpServer对象启动服务器(监听&…...
编译选项与常用环境变量
一、编译选项与常用环境变量 1、命令选项 -D 相当于就是定义,-D 可以理解为告诉cmake 后边我要定义一些参数,每定义一个就在前边加上-D就可以了,示例: #!/bin/shcmake -DTEST_DEBUGON . cmake --build .2、编译选项 下面列出来的…...
【SpringBoot2】SpringBoot开发实用篇
SpringBoot开发实用篇 KF-1.热部署 什么是热部署?简单说就是你程序改了,现在要重新启动服务器,嫌麻烦?不用重启,服务器会自己悄悄的把更新后的程序给重新加载一遍,这就是热部署。 热部署的功能是如…...
接口自动化测试框架搭建全部过程
思想: 1、基本目录的搭建 report:静态输出目录(报告或者日志) data:静态输入目录(可以存放Excel数据,被读取的一些数据) utils:实用方法层(这里存放的是项目的公共方法,一般拿到别…...
SQL学习(十)--DML_多表查询(针对数据表记录的join查询、子查询的操作)
目录 1. 多表查询 -- 内连接查询 1.1 显示内连接 1.2 隐式内连接 2. 多表连接 -- 外连接查询...
Docker容器部署
Docker容器部署 为什么使用Docker什么是Docker类比用途 Docker基于Windows集成IDEA在window上安装docker设置Docker配置IDEA连接Docker测试启动SpringBoot应用测试 Docker基于Linux集成IDEA连接宿主机redis服务连接Docker中redis服务 为什么使用Docker 在和前端联调的过程中&a…...
26岁转行网络安全,成功上岸安全开发!
前言 我是去年 9 月 22 日才正式学习网络安全的,之前在国营单位工作了 4 年,在长沙一个月工资只有 5000 块,而且看不到任何晋升的希望,如果想要往上走,那背后就一定要有关系才行。 而且国营单位的气氛是你干的多了&a…...
涨点技巧: 谷歌强势推出优化器Lion,引入到Yolov8,内存更小、效率更高,秒杀Adam(W)
1.Lion优化器介绍 论文:https://arxiv.org/abs/2302.06675 代码:automl/lion at master google/automl GitHub 1.1 简单、内存高效、运行速度更快 1)与 AdamW 和各种自适应优化器需要同时保存一阶和二阶矩相比,Lion 只需要动量,将额外的内存占用减半; 2)由于 Lion…...
5年测试经验,自动化都不会?月薪11K都难拿....
我接触了太多测试同行,由于多数同行之前一直做手工测试,现在很迫切希望做自动化测试,其中不乏工作5年以上的同行。 我从事软件自动化测试已经近十年,接触过底层服务端、API 、Web、APP、H5 等等,对自动化算是比较了解…...
低代码平台名声臭,用起来却真香——60%开发者不敢承认
群体盲从意识会淹没个体的理性,个体一旦将自己归入该群体,其原本独立的理性就会被群体的无知疯狂所淹没。——《乌合之众》 不知道从什么时候开始,“低代码不行”的论调充斥着整个互联网圈子,csdn、掘金、知乎、B站、脉脉……到处…...
PHP 的代码简洁之道(Clean Code PHP)
介绍 Robert C.Martin’s 的 软件工程师准则 Clean Code 同样适用于 PHP。它并不是一个编码风格指南,它指导我们用 PHP 写出具有可读性,可复用性且可分解的代码。 并非所有的准则都必须严格遵守,甚至一些已经成为普遍的约定。这仅仅作为指导方…...
delphi在两个窗口间用消息通讯
用SendMessage在窗口间通讯: 发送方 var HWD: THandle; str1,str2:string; sData: TCopyDataStruct; begin HWD:FindWindow(nil,pchar(aaaaaa)); // Integer(pchar(self.Edit2.Text)) str2:我来了中玉人; str1:我来了中玉人; sData.cbDa…...
如何高效提高倾斜摄影三维模型顶层合并的技术方法分析
如何高效提高倾斜摄影三维模型顶层合并的技术方法分析 1、倾斜摄影三维模型顶层合并 1.1倾斜摄影三维模型是一种基于倾斜摄影技术,通过多个角度拍摄同一区域的影像,利用计算机图像处理和三维重建技术生成的三维地理信息数据。由于一个大区域可能需要多块…...
一文读懂水面无人艇:每个硬件模块到底负责什么
目录 一、水面无人艇完整系统 二、硬件搭配负责哪些功能 2.1 艇体模块:决定“能不能稳、能不能装、能不能扛风浪” 2.2 动力与航行执行模块:决定“怎么动” 2.3 导航传感器模块:决定“我现在在哪、朝哪、跑多快” 1)GPS / 北…...
ABAP开发避坑指南:绕过SAP GUI安全弹窗的5种编程方案实测
ABAP开发实战:5种绕过SAP GUI安全弹窗的编程方案深度解析 引言:SAP GUI安全机制的困境与突破 在SAP系统的日常开发与运维中,频繁出现的"系统试图创建文件"安全弹窗堪称ABAP开发者的噩梦。这种设计初衷为保护本地文件安全的机制&…...
Canvas Quest人像修复与增强实战:老照片修复与画质提升
Canvas Quest人像修复与增强实战:老照片修复与画质提升 1. 老照片修复的痛点与解决方案 翻开家里的老相册,总能看到一些泛黄、破损或模糊的照片。这些承载着珍贵记忆的画面,往往因为年代久远而变得难以辨认。传统的手工修复不仅耗时费力&am…...
CSS图片轮播进阶:5种实现无限循环滚动的实战技巧(附完整代码)
CSS图片轮播进阶:5种实现无限循环滚动的实战技巧(附完整代码) 在电商网站的首页或个人作品集的展示页面中,图片轮播(Carousel)始终是吸引用户注意力的利器。而无限循环滚动效果,则能让有限的展示…...
大脑极简原理:比冯·诺依曼架构还简单的电磁路由网络 ——为什么意识和智能会从“对称判断”里自然涌现
前言:被复杂化的真相——大脑其实简单到爆我们从小被灌输一个观念:大脑是宇宙中最复杂的系统,860亿神经元、百万亿突触、无数神经递质,像一台精密到无法拆解的超级计算机。神经科学论文越写越长,模型越来越复杂&#x…...
数字化、智能化、移动化,人力资源系统革新的三大法宝!
人力资源系统革新,打造企业人才发展新引擎在当今竞争激烈的商业环境中,企业的人才发展成为了决定其成败的关键因素之一。然而,传统的人力资源管理系统往往存在着诸多问题,如流程繁琐、数据不精准、缺乏智能化等,这些问…...
OpenClaw安全防护指南:Qwen3-32B镜像对接时的权限控制策略
OpenClaw安全防护指南:Qwen3-32B镜像对接时的权限控制策略 1. 为什么需要安全防护? 去年我在尝试用OpenClaw自动整理财务报表时,曾因为一个简单的"读取桌面所有Excel文件"指令,差点导致包含客户隐私的文档被误传到测试…...
嵌入式C++ RAII互斥锁封装器MutexLocker详解
1. MutexLocker:嵌入式C RAII风格互斥锁封装器深度解析1.1 设计动机与工程价值在基于mbed RTOS(现为Mbed OS中CMSIS-RTOS v2兼容层)的嵌入式实时系统开发中,互斥量(Mutex)是保障多任务共享资源安全访问的核…...
AOP 代理对象的诞生时刻:Bean 生命周期中的“夺舍”瞬间
各位大佬,欢迎来到 Spring 容器最神秘、最惊心动魄的现场!很多人以为 AOP 是“天生”的, Bean 一出生就带着光环。大错特错!不过是前人在负重前行:Spring 先造出一个“纯净的肉身”(原始对象)&a…...
实战复盘:我是如何用Turbo Intruder的race.py脚本,5分钟挖到一个高并发订单漏洞的
高并发漏洞狩猎实录:从Turbo Intruder脚本调优到电商系统攻防实战 去年在一次众测项目中,我偶然发现某电商平台的积分兑换系统存在并发处理缺陷。这个漏洞最终被评级为高危,而整个挖掘过程只用了不到5分钟——关键就在于对Turbo Intruder的ra…...
