OpenGL配置及窗口创建过程

GLFW初步接触 计算机系的同学帮忙写的程序用的是freeglut。这是一个完全兼容于原来的glut库的开源库,不过我之前也没接触过glut,只知道是一个能用来创建窗口(后来大概知道还有些诸如“上下文”的专业名词)的库。但是这个库在实际使用当中有个非常严重的问题:没办法把窗口的边框和标题栏去掉。当时写的一个程序需要申请一个超过了32位系统允许的最大内存的空间,只能用64位程序实现,于是网上下了一个64位的源代码编译 阅读详情

1.软件安装与配置

1.1基础配置

Vs2010 +GLFW(创建窗体)+GLAD(显卡opengl函数地址访问)

glfw+glad是目前OpenGl项目开发的一种常用组合方式,glfw 官网 example也是这种组合方式。

其中,GLFW用来创建窗体; GLAD用来获得显卡opengl函数地址。

这是因为:

1).OpenGL是渲染2D、3D矢量图形硬件的一种软件接口,但OpenGL只提供了绘图功能,创建窗口是需要自己完成的。这就需要学习相应操作系统的创建窗口方法,比较复杂,并且每个操作系统都不同。为简化创建窗口的过程,可以使用专门的窗口库,例如GLUT、GLFW等。由于GLUT已经是90年代的东西了(不过后来还有freeglut),而GLFW是新的,因此建议使用GLFW。

2). 因为OpenGL只是一个标准/规范,具体的实现是由驱动开发商针对特定显卡实现的。由于OpenGL驱动版本众多,它大多数函数的位置都无法在编译时确定下来,需要在运行时查询。所以任务就落在了开发者身上,开发者需要在运行时获取函数地址并将其保存在一个函数指针中供以后使用。取得地址的方法因平台而异,以Windows为例,非常复杂,而且很繁琐,我们需要对每个可能使用的函数都要重复这个过程。幸运的是,有些库能简化此过程,其中GLAD是目前最新,也是最流行的库。

参考网址

各类之间的关系简介

OpenGL之gult/freeglut/glew/glfw/glad的联系与区别_无名小卒000001的博客-优快云博客_freeglut glfw

OpenGL入门教程

https://blog.youkuaiyun.com/xiangzhihong8/article/details/84776943?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165061786516782184628461%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=165061786516782184628461&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-84776943.142^v9^pc_search_result_cache,157^v4^control&utm_term=OpenGL&spm=1018.2226.3001.4187

GLFW+GLAD配置

https://learnopengl-cn.github.io/01%20Getting%20started/02%20Creating%20a%20window/#glad

1.2GLFW配置   

参考网址

[OpenGL]配置GLFW(超详细):

[OpenGL]配置GLFW(超详细) - collectionne - 博客园

GLFW+GLAD配置:

https://learnopengl-cn.github.io/01%20Getting%20started/02%20Creating%20a%20window/#glad

  1. 使用步骤:库编译+ IDE工程配置

通过库编译,生成适用的库文件:

  1. 官网下载GLFW源码;
  2. Cmake生成VS工程文件;
  3. 打开Cmake生成的工程文件;
  4. 将任一example工程设为为启动项;
  5. 开始编译,编译结束后在build\src\Debug中出现glfw3.lib文件;

库生成完毕之后,我们需要让IDE知道库和头文件的位置:

  1. 建立一个新的目录,如C:\Program Files (x86)\OpenGl,里面包含lib和Include文件夹,用以存放OpenGL工程用到的所有第三方库和头文件;
  2. 将GLFW的头文件目录GLFW和deps拷贝至include文件中;将lib文件拷贝至lib文件夹中;
  3. 设置IDE的路径和依赖的库文件glfwlib

1.3GLAD配置

参考网址

[OpenGL]配置GLFW(超详细):

[OpenGL]配置GLFW(超详细) - collectionne - 博客园

GLFW+GLAD配置:

https://learnopengl-cn.github.io/01%20Getting%20started/02%20Creating%20a%20window/#glad

使用步骤:源文件获取+ IDE工程配置

1).打开GLAD的在线服务,将语言(Language)设置为C/C++,在API选项中,选择3.3以上的OpenGL(gl)版本(我们的教程中将使用3.3版本,但更新的版本也能用)。之后将模式(Profile)设置为Core,并且保证选中了生成加载器(Generate a loader)选项。现在可以先(暂时)忽略扩展(Extensions)中的内容。都选择完之后,点击生成(Generate)按钮来生成库文件。

2).GLAD现在应该提供给你了一个zip压缩文件,包含两个头文件目录,和一个glad.c文件。将两个头文件目录(glad和KHR)复制到你的Include文件夹中(或者增加一个额外的项目指向这些目录),并添加glad.c文件到你的工程中。

3).经过前面的这些步骤之后,你就应该可以将以下的指令加到你的文件顶部了:

#include <glad/glad.h>

点击编译按钮应该不会给你提示任何的错误。经上述配置后,就可以使用GLFW和GLAD来设置OpenGL上下文并创建一个窗口。

2.第一个窗口示例

参考网址

你好,窗口 - LearnOpenGL CN

示例释义

         /** 1.初始化GLFW**/

         glfwInit();

         /** 2.配置GLFW **/

         /* 告知GLFW,OPENGL版本号 3.3 */

         glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);

         glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);

         /* 告知GLFW,使用的是核心模式*/

         //明确告诉GLFW我们需要使用核心模式意味着我们只能使用OpenGL功能的一个子集(没有我们已不再需要的向后兼容特性)

         glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

         //glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);

         /** 3.创建窗口 **/

         /* 函数名:长、宽、名,最后两个参数暂时忽略*/

         GLFWwindow* window = glfwCreateWindow(800, 600, "LearnOpenGL", NULL, NULL);

         if (window == NULL)

         {

                   std::cout << "Failed to create GLFW window" << std::endl;

                   glfwTerminate();

                   return -1;

         }

         /** 4.通知GLFW,将所创建的窗口的上下文设置为当前线程的主上下文了**/

         glfwMakeContextCurrent(window);

         /** 5.GLAD初始化 **/

         /*GLAD是用来管理显卡的OpenGL函数指针的,所以在调用任何OpenGL的函数之前需要初始化GLAD*/

         if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))

         {

                   std::cout << "Failed to initialize GLAD" << std::endl;

                   return -1;

         }

         /** 6.渲染窗口的尺寸大小,即视口(Viewport))设置**/

         /*这样OpenGL才知道怎样根据窗口大小显示数据和坐标*/

         /*OpenGL幕后使用glViewport中定义的位置和宽高进行2D坐标的转换,将(-1,1)的NDC坐标转为屏幕像素坐标*/

         /* 个人理解,其实是为光栅化提供依据*/

         glViewport(0, 0, 800, 600);

         glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);//窗口大小改变时Viewport设置

        

         /** 7.渲染循环 **/

         /* 希望程序在我们主动关闭它之前不断绘制图像并能够接受用户输入 */

         /* (1)每次循环开始前检查一次GLFW是否被要求退出 */

         while(!glfwWindowShouldClose(window))

         {

                   /* (2)检查有没有触发什么事件(比如键盘输入、鼠标移动等)、更新窗口状态,并调用对应的回调函数(可以通过回调方法手动设置)。*/

                   glfwSwapBuffers(window);

                   /* (3)双缓冲交换,使屏幕输出显示,类似于DirectDraw的blt*/

                   glfwPollEvents();   

         }

        

         /** 8.渲染结束,释放资源**/

         glfwTerminate();

openGL学习笔记(2):创建窗口 openGL学习笔记(2):创建窗口 首先,在main函数中调用glfwInit函数来初始化GLFW,然后可以使用glfwWindowHint函数来配置GLFW。 glfwWindowHint函数的第一个参数代表选项的名称;第二个参数用来设置这个选项的值。 glfwInit();//初始化GLFW glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);//OpenGL主版本号 glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3 阅读详情

相关推荐

使用OpenGL创建一个简单的窗口

通过运行上述代码,您将能够创建一个简单的窗口,并在窗口中显示文本“Hello, Window!在这个示例中,我们将OpenGL版本设置为3.3,并使用核心配置文件。在这个示例中,我们将OpenGL版本设置为3.3,并使用核心配置文件。在每次循环中,我们首先清除颜色缓冲区,然后交换缓冲区以显示我们绘制的内容。在每次循环中,我们首先清除颜色缓冲区,然后交换缓冲区以显示我们绘制的内容。通过运行上述代码,您将能够创建一个简单的窗口,并在窗口中显示文本"Hello, Window!函数中,我们开始初始化GLFW库。

2301_79326891的博客 200

OpenGL之创建窗口

一般它被认为是一个API(Application Programming Interface, 应用程序编程接口),包含了一系列可以操作图形、图像的函数。然而,OpenGL本身并不是一个API,它仅仅是一个由制定并维护的规范(Specification)。

一个小菜鸡的学习之路 1199

OpenGL创建窗口

OpenGL创建窗口前言GLFW构建GLFWCMake编译我们的第一个工程链接Windows上的OpenGL库Linux上的OpenGL库GLAD配置GLAD 前言 在我们画出出色的效果之前,首先要做的就是创建一个OpenGL上下文(Context)和一个用于显示的窗口。然而,这些操作在每个系统上都是不一样的,OpenGL有目的地将这些操作抽象(Abstract)出去。这意味着我们不得不自己处理创建窗口,定义OpenGL上下文以及处理用户输入。 幸运的是,有一些库已经提供了我们所需的功能,其中一部分是特别针

希望我的博客,能帮上你解决学习中工作中所遇到的问题 949

OpenGL---GLUT教程(三) GLUT窗口设置

                                        GLUT教程                                  为改造窗口做准备下载下面的VC工程并运行它(glut0.zip)(这个就是上一节的工程)。你将看到两个窗口:一个控制台窗口,一个OpenGL窗口。现在改变窗口大小使高度与宽度不再相等,这时三角形发生变形。这会发生是因为你没有正确设置

xie_zi的专栏 1万+

基于CANoe的车载以太网测试

以太网测试 CANoe

Yafet 4546

UVM和System verilog笔记总结(四)

virtual sequence 即虚seq,用于管理多个实sequence的执行顺序。 下面有三个sequence,此时需要virtual sequence去管理这三个的顺序。 virtual sequence和virtual sequencer需要成对写,使用例化实的sequence和sequencer控制: 此时在virtual sequence里面启动,而不是之前在test.sv里面用default或start函数启动。具体方法如下:先例化 再启动,用 `uvm_do_on 实sequence

weixin_42655118的博客 642

OpenGL 1.配置环境,创建窗口

OpenGL学习笔记

sinat_34014668的博客 567

高通跃龙QCS6490部署yolov11_obb实战:QNN SDK工具链全解析与避坑指南

本文详细解析了在高通跃龙QCS6490平台上部署yolov11_obb模型的实战过程,重点介绍了QNN SDK工具链的使用与优化技巧。从环境配置、模型转换到性能调优,提供了全面的避坑指南和DSP加速配置建议,帮助开发者高效实现旋转框检测任务在边缘设备上的部署。

weixin_29232121的博客 303

VS2019 OpenGL配置环境并创建第一个窗口

( 本文为LearnOpenGL教程的学习记录及拓展学习,教程链接:https://learnopengl-cn.github.io/) 0、前言 创建OpenGL上下文通常需要编写特定于平台的代码才能创建窗口。它还需要从该上下文手动加载OpenGL函数。这些工具在大多数情况下提供了跨平台的解决方案,极大地简化了这些任务。LearnOpenGL教程使用GLFW创建上下文和窗口,使用GLAD来...

龚建波 4836

【Qwen2微调实战】LLaMA-Factory框架对Qwen2-7B模型的微调实践

在人工智能的浪潮中,大型语言模型(LLMs)正逐渐成为研究和应用的热点。它们在自然语言处理(NLP)的各个领域,如文本生成、翻译、问答等任务中展现出了卓越的能力。Qwen2-7B模型,作为该领域的佼佼者,不仅因其庞大的参数量和强大的表示能力受到关注,更因其在微调后能够更好地适应特定任务而备受关注。本文将详细介绍如何利用LLaMA-Factory这一高效的微调框架对Qwen2-7B进行微调,以期达到提升模型在特定任务上的表现。

寻道AI,探索AI无限可能! 2万+

Android Jetpack 最全面试题及参考答案

要使用 WorkManager 定义一个异步任务,以下是详细步骤。首先,需要创建一个继承自 Worker 类的自定义类,这个类代表了要执行的具体任务逻辑。// 在这里编写具体的任务逻辑,比如从网络下载文件try {在上述代码中,doWork方法就是任务的核心执行逻辑所在,这里模拟了从给定的 URL 下载文件到本地的操作,若下载成功返回,若出现异常则返回。然后,在需要调度任务的地方,比如在某个 Activity 或者 Fragment 中,通过构建 WorkRequest 来安排任务执行。

大模型大数据攻城狮的专栏 1892

OpenGL学习笔记1——搭建OpenGL的环境和创建第一个窗口

GLWF搭建OpenGL的环境1 配置环境1.1简单介绍GLWFCMakeGLAD1.2 开始配置遇到的问题 1 配置环境 1.1简单介绍 GLWF GLWF是一个专门针对OpenGL的C语言库,它提供了一些渲染物体所需的最低限度的接口。它允许用户创建OpenGL上下文,定义窗口参数以及处理用户输入。 首先在网页上下载32位的GLWF(一定是32位,因为据说64位的就是用不了)。这里其实下载Sou...

lxbhahaha的博客 977

软件测试面试题之易错题

(1)白盒测试:又称功能功能 测试、数据驱动测试和行为测试,是一种从用户观点出发的测试,被测程序为黑盒子, 通过测试来检测每个功能是否能够正常使用。(2)黑盒测试:又称结构测试和逻辑驱动 测试,是知道产品内部工作过程,通过测试来检测产品内部动作是否按照规格说明书 的规定去正常运行。(1)、测试需求分析;(2)动态白盒测试:需要对各个模块功能、模块间的接口、局部数据结构、主要执行路径、 错误处理等方面的测试。(2) 集成测试所测试的对象是模块间的接口,其目的是在找出在模块接口上面,包括整体体系结构上的问题;

m0_37449634的博客 678

OpenGL学习(1)——创建窗口

这是我的第一篇博客,试着记录学习OpenGL的过程。使用的教程:LearnOpenGL,系统:Deepin 15.9.3,IDE:Qt Creator。 添加头文件 创建窗口用到两个库:GLFW和GLAD,这里GLAD也可以替换成GLEW。添加头文件很简单,直接include就好: #include <iostream> #include <glad/glad.h> #in...

weixin_34205076的博客 120

英飞凌TC3xx之一起认识GTM系列(一)先来认识GTM架构

本文讲述英飞凌TC3xx的通用计时器GTM的架构。

无所适从的我的博客 4594

飞行机械臂设计

其后对飞行机械臂系统的机 理模型和基于 ADAMS 的物理模型进行了控制系统的搭建,对于机理模 型,设计了三个输入通道,分别是俯仰力矩,翻滚力矩与偏航力矩,控 制量为翻滚角,俯仰角,偏航角。四旋翼无人机自身具有独特的优势,在无人机上增加机械臂,整个 机体系统相当于一架空中行动自如的空中机器人,可以适应更多的应用场合,能够实现空中抓取,运输载荷,巡航监视等任务。的函数模块如图 4-8 所示,可见输入为 U1,U2,U3,U4,分别对应总力矩,俯仰力矩,翻滚力矩,偏航力矩,控制 量为俯仰角,翻滚角,偏航角。

coldmood77的博客 2914

opengl学习笔记(二):使用OpenCV来创建OpenGL窗口

通常的增强现实应用需要支持OpenGL的OpenCV来对真实场景进行渲染。从2.4.2版本开始,OpenCV在可视化窗口中支持OpenGL。这意味着在OpenCV中可轻松渲染任何3D内容。 若要在OpenCV中开始一个OpenGL窗口,需要做的第一件事是生成支持OpenGL的OpenCV。 在cmake的时候,应该设置标志: cmake -D ENABLE_OPENGL=YES...

anlaiji6783的博客 473

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

OpenGL学习(一)创建窗口

参考官方文档:https://learnopengl-cn.github.io/ 一直对OpenGL很感兴趣,但每次找到网上各种教程,跟着教程做总是不知道哪里出错了总是运行不出来,可能是自己有某一步出错了,也可能是这些教程都漏了什么细节没交代。这里终于根据官方教程结合自己的探究总算成功完成了第一步:创建一个窗口。为此,必须把整个步骤详细交代以下,方便作为以后的参考。 知识储备:这里是需要熟悉C++,虽然其他语言如C#也是可以通过安装OpenTK来进行OpenGL编程的,但OpenTK的相关资料太少了,所以感

xhh22900的博客 1089

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

创建一个OpenGL窗口

创建一个OpenGL窗口 在上节课Windows10+VS2017 用GLFW+GLAD 搭建OpenGL开发环境中,我们搭建好了OpenGL开发环境。这节课编写代码去测试开发环境。 还是用上节课创建的OpenGL项目,右击源文件-&gt;添加新建项CreateWindow.cpp。 编写代码: #include &lt;glad/glad.h&gt; /...

fenggewan的博客 223

QtOpenGL之创建窗口Qt5

这个教程是从一个国外的博主搬过来的,我做了一些简单翻译和简化工作,因为我发现目前存在的qtopengl的代码版本太低了,很难上手使用,因此我将在Qt5的基础上,说明下qtopengl的使用,并将文章作为自己的一些笔记,笔者能力有限,可能存在一些疏忽的地方,欢迎大家指证。 在接下来的介绍中,已经默认读者掌握了Qt的 信号和槽的使用,并能简单的构建一些应用程序。注意这里不是opengl或qt的教程,...

SUST_DOG_MASTER博客 1489

OpenGL初始化,窗口创建,着色器配置

画一个三角形

Colinnian的博客 711

OpenGL中创建一个窗口

近日需要把一副全景图映射到一个立方体上,在立方体中间架一台摄像机,在摄像机中间看到的任何一个方向都是很真实的效果;这中间直观来说有两个步骤,第一个就是把全景图映射到一个球上,之后通过建一个立方体,这个立方体的中心通过球心,那么这立方体六个面上的每一个面是怎样的图像,我们主要的目的是实现这个。 网上有很多学习OpenGL的教程,下面推荐一个我一直在用的:LearnOpenGL。之后的学习OpenGL

u013517182的博客 1268

01 创建一个窗口

https://learnopengl-cn.github.io/01%20Getting%20started/03%20Hello%20Window/ https://zhuanlan.zhihu.com/p/107671711 使用:glad+glfw 1 创建窗口的步骤: 初始化GLFW语言库,之后才可以调用GLFW库里大部分的函数; 配置GLFW,说明要使用的版本与使用的模式; 教程都是基于OpenGL 3.3版本展开讨论的,所以需要告诉GLFW我们要使用的OpenGL版本是3.3,.

longlongqin的博客 280

openGL 学习笔记一:环境配置 vs2022

前言 最近,开始复习下openGL的新手教程,这里记录下复习笔记。 1.GLFW GLFW是一个专门针对OpenGL的C语言库,它提供了一些渲染物体所需的最低限度的接口。它允许用户创建OpenGL上下文,定义窗口参数以及处理用户输入,GLFW可以从它官方网站上获取。下载页http://www.glfw.org/download.html 选32位就行,最新版本稳定版本 :glfw-3.3.4,下载源码包之后,将其解压并打开。 我们只需要里面的这些内容: 编译生成的库 include文件夹 接下

ACG_Angel 4904

[OpenGL]创建一个窗口

代码#include <stdio.h> #include <stdlib.h>//GLEW 的库 #include <GL/glew.h> //GLFW 的库,处理窗口和键盘的消息 #include <glfw3.h> GLFWwindow* window;////三维数学的库 #include <glm/glm.hpp> using namespace glm;int main(

Younix凌乱的草稿本 1873

OpenGL学习日记——Create a window

前言 此系列主要记录本人自学OpenGL过程中一些经验和感悟,写下来与大家分享,若存在错误,欢迎指出。 学习过程中主要看了LearnOpenGL这个网站,很全面,非常推荐。 Creat a window ...

WM_Kt的博客 301
上一篇: C++回调函数必须为静态函数的原因+访问非静态成员方法
MissCoder
博客等级 码龄11年 43粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值