OpenGL学习笔记【2】——开发环境配置(GLFW,VS,Cmake),创建第一个项目

      学OpenGL的都会知道,OpenGL只提供了绘图功能,创建窗口是需要自己完成的。这就需要学习相应操作系统的创建窗口方法,为简化创建窗口的过程,可以使用专门的窗口库,例如GLFW。使用GLFW之前需要先进行配置,那怎么配置呢?本文将会介绍配置方法。

一、GLFW简介   

         GLFW是配合 OpenGL 使用的轻量级工具程序库,缩写自 Graphics Library Framework(图形库框架)。GLFW 的主要功能创建并管理窗口和 OpenGL 上下文,同时还提供了处理手柄、键盘、鼠标输入的功能

      GLFW是用C语言编写的,GLEW 是对底层 OpenGL 的接口的封装,可以让开发者的代码跨平台,支持Windows,macOS,X11和Wayland。

二、GLFW的配置步骤

2.1、第一步:下载GLFW源码包(source package)

        GLFW已经提供为Visual Studio(2012到2022都有)预编译好的二进制版本和相应的头文件,但是一般不建议下载预编译好的二进制文件,因为在不同的电脑上面可能会无法运行,最好还是自己下载源码进行编译,从源代码编译可以保证生成的库完全适合你的操作系统和CPU。

源代码包的下载网址:https://www.glfw.org/download.html。

当前文档使用的GLFW版本是(3.3.9

  下载GLFW源码包之后,将其解压并打开

  

     

 2.2、第二步:安装Visual Studio 

     当前文档使用的VS版本是Visual Studio 2022 ,由于学习用,下载个人开发版(Community)就行:

 下载完毕,打开Visual Studio Installer 勾选以下安装项

 

 点击单个组件检查一下,以下组件最好不要忘记勾选

2.3、第三步:安装构建工具-CMAKE

      CMake是一个开源的跨平台构建系统,是一个工程文件生成工具,它使开发人员能够以与编程语言无关的方式管理构建进程。它生成各种平台的构建文件,包括Windows、Linux、macOS和Unix。它用于自动化从源代码创建可执行文件、库和其他软件构件的过程。

     CMake使用一个名为CMakeLists.txt的配置文件来定义项目的源文件、依赖项和构建目标。 用户可以使用预定义好的CMake脚本,根据自己的选择(Visual Studio, Eclipse等)生成不同IDE的工程文件。

     CMAKE的安装教程:Windows平台CMake的安装-CSDN博客

2.4、第四步:启动CMake,进行配置,并生成工程文件

    

       2.4.1、启动Cmake后可以看到 CMake需要选择两个目录

      (1)源代码目录:就是我们第一步下载解压的GLFW的源代码的根目录                                                 (D:/openGlLearn/glfw-3.3.9);

      (2)目标文件目录:存放编译结果的,新建build 文件夹,选中作为目标目录

    2.4.2、点击Configure(设置)按钮,让CMake读取设置和源代码

    在设置完源代码目录和目标目录之后,点击Configure后会打开如下界面: 

   (1)需要选择工程的生成器:VS2022(Visual Studio 2022的内部版本号是17)

   (2)可选的编译选项用来配置最终生成的库,我们使用默认设置;

 

 选择好之后,点击finish,结果如下

  2.4.3、点击Generate(生成)按钮,生成GLFW的项目文件

 生成的工程文件会在上面2.4.1步骤里创建的build文件夹中

 2.5、第五步:编译生成GLFW库文件

   找到上面2.4.3步骤里build文件夹中生成的GLFW的项目文件,找到GLFW.sln文件,用Visual Studio 2022打开:

打开工程文件后,点击生成解决方案编译出库文件

在build/src/Debug文件夹内就会出现我们编译出的GLFW的库文件glfw3.lib

2.6、第六步:把OpenGL用到的GLFW文件放在指定文件夹

      在使用GLFW库时,为了让集成开发环境IDE比如VS知道GLFW的(库和头文件)的位置,通常需要创建IncludeLibs这两个文件夹来存放OpenGL工程用到的所有头文件和第三方库,这样所有第三方库都在同一个位置(并且可以共享至多台电脑)。

  2.6.1、创建IncludeLibs这两个文件夹

    本文档中,我们是在GLFW的源代码的根目录的同级目录下创建的

   

2.6.2、复制GLFW源码包中的头文件到新建的Include文件夹中

 (1)找到GLFW的头文件复制一下

  (2)放入新建的Include文件夹

2.6.3、复制2.5步骤中编译生成的GLFW的库文件到新建的Libs文件夹中

    (1)找到GLFW的库文件复制一下

     (2)放入新建的Libs文件下

完成以上步骤后,我们就可以使用GLFW创建我们的第一个OpenGL工程了。

三、GLFW的配置完成后,创建我们的第一个工程

 3.1、打开Visual Studio,创建一个新的项目

   选择Visual C++,然后选择Empty Project(空项目)(别忘了给你的项目起一个合适的名字)

  

 

  

 3.2、GLFW库链接(引入)进工程

    为什么要进行链接?  

     我们创建的这个项目需要用到GLFW库,只有链接了你要使用的第三方库,才能够使用,所以需要把GLFW库链接(Link)进工程但是由于我们在2.6步骤中将第三方库放在了创建的IncludeLibs文件目录中,此时我们的项目还不知道在哪寻找这个文件,所以在链接引入库文件之前,首先需要VS可以找到所需的所有文件.

 3.2.1、 VS能够找到所需的GLFW文件需进行的配置

    如果想要VS能够找到所需的GLFW文件,我们需要将2.6步骤中的IncludeLibs文件目录指定到包含目录和库目录中。

 (1)右击我们新创建的额项目,点击属性

  

(2)将FGLFW的头文件夹指定到包含目录

  

(3)将GLFW的库文件夹指定到库目录

经过3.2.1的操作,现在VS可以找到所需的所有文件了

  需要注意:每次新建一个工程时都需要告诉IDE/编译器在哪能找到这些目录

3.2.2、开始链接(引入)GLFW库到我们创建的项目中

   要链接一个库,我们必须告诉链接器它的文件名,GLFW库名字是glfw3.lib
   选择链接器的输入选项卡,点击附加依赖项右边的向下箭头,点击编辑

  

这样GLFW库在我们创建的这个项目编译的时候就会被链接进来了。

 3.3、OpenGL库链接(引入)进工程

  除了GLFW库链接进项目之外,还需要把OpenGL库链接进项目,但是这个库可能因为系统的不同而有一些差别。

     我目前使用的是windows平台,由于用的是VS编译器,opengl32.lib已经包含在Microsoft SDK里了,它在Visual Studio安装的时候就默认安装了,我们只需将opengl32.lib添加进链接器设置里就行了。

此时GLFW库以及OPENGL库就链接完毕了,GLFW的安装与配置就到此为止。

 你以为这样就完啦,不,我们仍然还有一件事要做。由于OpenGL驱动版本众多,它大多数函数的位置都无法在编译时确定下来,需要在运行时查询。所以任务就落在了开发者身上,开发者需要在运行时获取函数地址并将其保存在一个函数指针中供以后使用。取得地址的方法因平台而异,在Windows上会是类似这样:

 

    你可以看到代码非常复杂,而且很繁琐,我们需要对每个可能使用的函数都要重复这个过程。幸运的是,有些库能简化此过程,其中GLAD是目前最新,也是最流行的库 。

 下一章节:我们学习将如何配置GLAD

 上一章节:OpenGL学习笔记【1】——简介-CSDN博客

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

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

相关文章

css实现的3D立体视觉效果鸡蛋动画特效

这是一个基于纯css实现的3D立体视觉效果鸡蛋动画特效,喜欢的朋友可以拿来使用演示动态效果 css实现的3D立体视觉效果鸡蛋动画特效

spark RDD 创建及相关算子

RDD编程入口 RDD编程入口对象是SparkContext对象,想要调用相关的计算api都需要通过构造出的sparkcontext对象调用 RDD的创建 通过并行化集合创建RDD(本地集合转为分布式),api如下 rdd sc.parrallize(param1, param2)参数1是本…

Linux:点命令source

相关阅读 Linuxhttps://blog.csdn.net/weixin_45791458/category_12234591.html?spm1001.2014.3001.5482 source命令用于读取一个文件的内容并在当前Shell环境(包括交互式Shell或是非交互式Shell)执行里面的命令。它被称为点命令是因为命令名source也可…

植被参数光学遥感反演方法(Python)及遥感与生态模型数据同化算法

“绿水青山就是金山银山”的生态文明理念现已深入人心,从顶层设计到全面部署,生态文明建设进入举措最实、推进最快、力度最大、成效最好的时期。生态文明评价必须将生态系统健康作为基本内容,而作为生态系统健康评价的重要指标之一——植被参…

C语言字符函数与字符串函数:编织文字的舞会之梦(上)

欢迎来到白刘的领域 Miracle_86.-CSDN博客 系列专栏 C语言知识 先赞后看,已成习惯 创作不易,多多支持! 在编程的过程中,我们经常要处理字符以及字符串,为了方便操作这些字符和字符串,C语言标准库中提供…

nodejs社区垃圾分类管理平台的设计与实现python-flask-django-php

近些年来,随着科技的飞速发展,互联网的普及逐渐延伸到各行各业中,给人们生活带来了十分的便利,社区垃圾分类管理平台利用计算机网络实现信息化管理,使整个社区垃圾分类管理的发展和服务水平有显著提升。 语言&#xf…

EasyExcel模板填充list时按第一行格式合并单元格(含分页线设置)

前言: 在使用easyExcel填充list时,第一行存在合并单元格的情况下,后面使用forceNewRow()填充的行却没有合并样式。 模板: 填充后: 自定义拦截器: 根据官方文档的提示,我们需要自定义拦截器来…

RK3399 android10 移植SiS-USB触摸驱动

一,SiS USB触摸简介 SiS USB 触摸屏通常是一种外接式触摸屏设备,通过 USB 接口连接到计算机或其他设备上。这种触摸屏设备可以提供触摸输入功能,用户可以通过手指或触控笔在屏幕上进行操作,实现点击、拖动、缩放等操作。 SiS USB…

(三维重建学习)已有位姿放入colmap和3D Gaussian Splatting训练

这里写目录标题 一、colmap解算数据放入高斯1. 将稀疏重建的文件放入高斯2. 将稠密重建的文件放入高斯 二、vkitti数据放入高斯 一、colmap解算数据放入高斯 运行Colmap.bat文件之后,进行稀疏重建和稠密重建之后可以得到如下文件结构。 1. 将稀疏重建的文件放入高…

线段树优化dp

abc339 E - Smooth Subsequence 思路:我们很容想到一个 n n n方的的状态转移方程,即对于每个i,我们去枚举 1 1 1到 i − 1 i-1 i−1的状态,即 d p [ i ] m a x ( d p [ i ] , d p [ j ] 1 ) ; dp[i]max(dp[i],dp[j]1); dp[i]ma…

异常:程序出现的问题

目的:为了以后发现异常后怎么去处理 异常的作用

(css)步骤条el-steps区分等待、进行中、完成三种状态的图片

(css)步骤条el-steps区分等待、进行中、完成三种状态的图片 效果&#xff1a; <el-steps :active"active" finish-status"success" class"steps"><el-step title"选择.."></el-step><el-step title"..规则&…

Photoshop 2024让图像处理更智能、更高效@

Photoshop 2024是一款功能强大的图像处理软件&#xff0c;广泛应用于创意设计和图像处理领域。它提供了丰富的绘画和编辑工具&#xff0c;包括画笔、铅笔、颜色替换、混合器画笔等&#xff0c;使用户能够轻松进行图片编辑、合成、校色、抠图等操作&#xff0c;实现各种视觉效果…

「数据分析」之零基础入门数据挖掘

摘要&#xff1a;对于数据挖掘项目&#xff0c;本文将学习应该从哪些角度分析数据&#xff1f;如何对数据进行整体把握&#xff0c;如何处理异常值与缺失值&#xff0c;从哪些维度进行特征及预测值分析&#xff1f; 探索性数据分析&#xff08;Exploratory Data Analysis&#…

Mysql——基础命令集合

目录 前期准备 先登录数据库 一、管理数据库 1.数据表结构解析 2.常用数据类型 3.适用所有类型的修饰符 4.使用数值型的修饰符 二、SQL语句 1.SQL语言分类 三、Mysql——Create,Show,Describe,Drop 1.创建数据库 2.查看数据库 3.切换数据库 4.创建数据表 5.查看…

模型部署 - onnx的导出和分析 - onnx 的架构和 onnx helper 的使用 - 学习记录

onnx 的架构和 onnx helper 的使用 简介一、onnx 的架构二、onnx 实践2.1、 create - linear.onnx2.1.1、要点一&#xff1a;创建节点2.1.2、要点二&#xff1a;创建张量2.1.3、要点三&#xff1a;创建图 2.2、 create - onnx.convnet2.3、使用 onnx helper 导出的基本流程总结…

理解数据库习题

1.选择 &#xff08;1&#xff09;现实世界中客观存在并能相互区别的事物称为&#xff08; &#xff09;。 A.实体 B.实体集 C字段 D 记录 &#xff08;2&#xff09;下列实体类型的联系中&#xff0c;属于一对一联系的是&#xff08; &#xff09;A.教研室对教师的所属联系 …

[BT]BUUCTF刷题第2天(3.20)

第2天&#xff08;共5题&#xff09; Web [ACTF2020 新生赛]Exec Payload&#xff1a;target127.0.0.1;cat /flag 分号;在许多shell中用作命令分隔符&#xff0c;意味着在执行完前一个命令&#xff08;这里是设置target变量&#xff09;后&#xff0c;接着执行cat /flag命令…

企业工商年报注册注销商标注册异常处理小程序开源版开发

企业工商年报注册注销商标注册异常处理小程序开源版开发 1、独立业务模型包括&#xff1a;企业工商年报、企业工商登记注册、企业注销登记、企业异常处理。 2、通用业务模型适合各种业务&#xff0c;比如&#xff1a;商标注册代理、财务会计服务、企业版权登记登。 当然&…

从深度伪造到恶意软件:网络安全迎来AI新挑战

如今&#xff0c;有越来越多的恶意行为者开始利用AI大语言模型开发能够绕过 YARA 规则的自我增强型恶意软件。 根据近日Recorded Future 发布的一份新报告&#xff1a;AI可以通过增强小型恶意软件变种的源代码来规避基于字符串的 YARA 规则&#xff0c;从而有效降低检测率。 …