LearnOpenGL学习笔记——OpenGL创建窗口

LearnOpenGL 入门—创建一个窗口 文章目录写在前面初始化GLFW窗口对象GLAD视口渲染循环最后一件事输入渲染总结 写在前面   原文链接。原文应该是github上的一个项目,本文主要用来记录一些知识点和自己遇到的问题。 初始化GLFW   首先,我们在main函数中调用glfwInit函数来初始化GLFW,然后我们可以使用glfwWindowHint函数来配置GLFW。glfwWindowHint函数的第一个参数代表选项的名称,我们可以从很多以GLFW_开头的枚举值中选择;第二个参数接受一个整型,用来设置这个选项的值。该函数的所有的选项 阅读详情

创建窗口

GLFW

GLFW是一个专门针对OpenGL的C语言库,它提供了一些渲染物体所需的最低限度的接口。它允许用户创建OpenGL上下文,定义窗口参数以及处理用户输入,这正是我们需要的.

GLAD

GLAD是一个开源的库,它解决驱动开发商针对特定显卡实现的OPENGL时,大部分函数的位置都无法确定下来,需要在运行时查询,GLAD解决运行时查询函数位置的问题。

#include <glad/glad.h>
#include <GLFW/glfw3.h>

#include <iostream>

// 每当用户改变窗口大小的时候,视口也应该被调整,我们可以对窗口注册一个回调函数(CallBack Function) ,它会在每次窗口大小被调整的时候被调用
void framebuffer_size_callback(GLFWwindow* window, int width, int height)
{
	glViewport(0, 0, width, height);
}

// 按esc退出
void processInput(GLFWwindow* window)
{
	if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS)
		glfwSetWindowShouldClose(window, true);
}

int main() {

	//初始化GLFW
	glfwInit();
	// 3版本的核心模式 版本 3.3
	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 == NULL)
	{
		std::cout << "Failed to create GLFW window" << std::endl;
		glfwTerminate();
		return -1;
	}
	glfwMakeContextCurrent(window);

	// GLAD 是用来管理OPENGL的函数指针的,所以在调用任何的函数之前我们需要初始化GLAD我们给GLAD传入了用来加载系统相关的OpenGL函数指针地址的函数。GLFW给我们的是glfwGetProcAddress,它根据我们编译的系统定义了正确的函数
	if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
	{
		std::cout << "Failed to initialize GLAD" << std::endl;
		return -1;
	}

	// 我们必须告诉openGL渲染窗口的尺寸大小,即视口(Vieweport) ,第三个和第四个参数控制渲染窗口的宽度和高度(像素)
	glViewport(0, 0, 800, 600);

	//注册窗口大小调整的回调函数
	glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);

	// Render Loop  检查window是否被要求退出
	while (!glfwWindowShouldClose(window))
	{
		// 输入
		processInput(window);

		// 函数会交换颜色缓冲(它是一个储存着GLFW窗口每一个像素颜色值的大缓冲),它在这一迭代中被用来绘制,并且将会作为输出显示在屏幕上
		glfwSwapBuffers(window);
		// 函数检查有没有触发什么事件(比如键盘输入、鼠标移动等)、更新窗口状态,并调用对应的回调函数(可以通过回调方法手动设置)
		glfwPollEvents();
		// glClearColor来设置清空屏幕所用的颜色。当调用glClear函数,清除颜色缓冲之后,整个颜色缓冲都会被填充为glClearColor里所设置的颜色
		glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
		glClear(GL_COLOR_BUFFER_BIT);
	}
	/*
	* 双缓冲(Double Buffer)
	应用程序使用单缓冲绘图时可能会存在图像闪烁的问题。 
	这是因为生成的图像不是一下子被绘制出来的,而是按照从左到右,由上而下逐像素地绘制而成的。
	最终图像不是在瞬间显示给用户,而是通过一步一步生成的,这会导致渲染的结果很不真实。
	为了规避这些问题,我们应用双缓冲渲染窗口应用程序。前缓冲保存着最终输出的图像,它会在屏幕上显示;
	而所有的的渲染指令都会在后缓冲上绘制。
	当所有的渲染指令执行完毕后,我们交换(Swap)前缓冲和后缓冲,这样图像就立即呈显出来,之前提到的不真实感就消除了
	*/

	// main 函数结束后调用释放,删除之前分配的所有资源
	glfwTerminate();

	return 0;
}

说明:以上内容大部分摘抄自
https://learnopengl-cn.github.io/01%20Getting%20started/03%20Hello%20Window/

写文章只是为了让自己理解的更加深刻,如果想要学习opengl,建议

https://learnopengl-cn.github.io/ 网站学习,英文版食用更佳

OpenGL下多视窗口的实现 这是一篇如何使用OpenGL实现多视窗口的文章,内容十分简单易懂,看了很容易明白。 立即下载

相关推荐

YOLO11实战 第001期-基于yolo11的CrowdHuman密集行人目标检测实战文档(yolo格式数据免费获取)

1.数据阶段在拥挤/遮挡场景下,使用crowdhuman数据集重训练后的yolo11,效果表现较好。crowdhuman数据集标签如下,有Head BBox、Visible BBox、Full BBox。如下图显示:数据集介绍CrowdHuman数据集是旷世发布的用于行人检测的数据集,图片数据大多来自于google搜索。CrowdHuman数据集数据量比较大,15000张,5000张,验证集4370张。训练集和验证集中共有470K个实例,约每张图片包含23个人,同时存在各种各样的遮挡。

深度学习算法工程师,专注于前沿算法研究与实战应用。在这里,我将分享深度学习领域的实战经验、优质数据集资源以及最新论文解读与精度分析,旨在与广大技术爱好者共同探索人工智能的奥秘,助力技术成长与创新。 2161

OPENGL中GLAD的代码实现过程

下面的这行代码就是加载所有的OpenGL功能函数,这个任务由glad来负责完成: if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)) { std::cout << "Failed to initialize GLAD" << std::endl; return -1; } 一、先看下GLAD是怎么样和Opengl32.dll建立联系的 1.glfwGetProcAd...

huzhifei的专栏 1768

win10删除vmware12后,重新安装失败(遗留注册表问题)解决总结

之前安装过一次VMware虚拟机,后来由于某些已遗忘原因把它卸载了,但是没有卸载完全,为以后安装留下了一些麻烦,现在根据我google很多内容总结后写下了自己的解决办法。 一些我搜的的可以用的VM12的注册码 5A02H-AU243-TZJ49-GTC7K-3C61N ZZ510-DYX47-48ERP-D6XZG-YCKU2 YV5MU-2FX5H-M841P-LZX5X-PYHX8

Jeason的博客 2万+

OpenGL-learning之GLFW窗口的搭建

配置GLFW窗口的步骤 配置环境 本文引用了Joey de Vries的learningOpenGL的部分内容。 本文也是对learningOpenGL学习后的总结和记录,在此感谢!!! 新建一个c++空项目 选择菜单栏中的“项目”–>“项目属性” 单击“VC++目录”–>找到"包含目录"和"库目录",在里面添加include和lib 选择"连接器"–>“输入”–>"附加依赖项"中添加opengl32.lb和glfw3.lib 在头文件目录中新建一个glad.c文件,然后将gl

weixin_43270285的博客 948

PCB压合原理与工艺全流程深度解析

PCB压合是多层印制电路板制造中的核心工序,其本质并非简单物理叠加,而是高分子树脂流动、玻璃布应力释放、铜箔热膨胀及界面能调控的协同过程。理解压合原理,需掌握温度-压力-时间三维曲线动态关系;优化工艺流程,须兼顾叠板精度、热压参数匹配与冷却策略;关键影响因素如半固化片(PP)选型、铜箔表面处理、设备温场均匀性、结构对称性、环境湿度及操作手法,共同决定层间结合力、翘曲度与孔壁质量。本文围绕PCB压合原理、工艺流程、关键影响因素三大维度展开,融合IPC标准、实测数据与产线案例,为工艺工程师、NPI人员及设备维护

weixin_29191081的博客 256

CMAC算法原理

2、K1 通过以下运算导出:若 L 的最高有效位等于 0,则 K1 是 L 的左移 1 位。3、K2 通过如下运算导出:若 K1 的最高有效位等于 0,则 K2 是 K1 的左移 1 位。采用了 AES 算法中的类似 CBC 模式的加密方式,即对前一个分组的密文与当前分组的明文进行异或操作后在加密,2、分块处理:首先将消息分成多个固定长度的块,若消息长度不是块大小的倍数,则可以使用填充来将其填充到合适的大小。1、子密钥计算,通过主密钥生成子密钥(key1,key2),子密钥用于最后一个块处理;

sky的博客 1658

OpenGL学习笔记:你好,窗口

#include <glad/glad.h> #include <GLFW/glfw3.h> #include <iostream> #include <windows.h> const unsigned int SCR_WIDTH = 800; const unsigned int SCR_HEIGHT = 600; void framebu...

mumufan05的专栏 1万+

Manus通用AI智能体完全使用指南(2025最新版)——从注册到高阶技巧全解析

Manus通用AI智能体完全使用指南(2025最新版)——从注册到高阶技巧全解析

m0_69718028的博客 8116

OpenGL学习过程中常见的事故

列举了一些OpenGL学习过程中常见的事故(比较难看出来的错误)

qq_38242030的博客 305

【数据分析】比较SparCC、Pearson和Spearman相关性估计方法在合成组学数据上的表现

【数据分析】比较SparCC、Pearson和Spearman相关性估计方法在合成组学数据上的表现

专注生信领域 659

【红外DDE算法】一种应用于高动态范围红外可视化的算法

【红外DDE算法】一种应用于高动态范围红外可视化的算法 - 这个算法背后的动机 - 展示这个算法的流程 - 然后讨论各个可调参数的意义。

sunwindl91181的博客 1682

OpenGL中最简单的窗体创建和渲染(初始化GLFW、GLAD、定义视口大小和resize回调、双层缓冲、输入事件处理)

GLFW的配置说明 步骤:创建的窗口对象容纳了所有的窗口数据(初始化之后的代码段)。 最后一行代码的目的是让我们窗口的context成为当前线程的主context。glfwGetProcAddress根据操作系统提供函数。 定义视口大小 定义并注册resize事件 准备engines 为了不让应用程序画一帧就关掉窗口,使用while定义render loop。 glfwWindowShouldClose检验窗体是否被关闭 glfwSwapBuffers交换颜色缓存(是一个巨大的包含GLFW窗口的每个

weixin_43399489的博客 1799

华为OD新系统机试真题-勇攀数字高峰(Java/Py/C/C++/Js/Go)

新系统 华为OD机试新系统【勇登数字高峰】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD新系统机试真题【勇登数字高峰】

qq_45776114的博客 1546

【OpenGL】LearnOpenGL学习笔记01 - 环境配置、窗口创建

LearnOpenGL学习笔记 - 环境配置、窗口创建

Duo1J的随笔 488

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

android 蓝牙通讯demo

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

LearnOpenGL-笔记-其一

首先我们要确认什么是OpenGL:现在让我们来做第一个小项目吧:我们要创建我们的窗口!

lastXuanGod的博客 1327

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

opengl 创建context_UE4精品课程 | OpenGL学习笔记(二)绘制窗口

本文转载于拉Box小能手知乎作者原文链接:https://zhuanlan.zhihu.com/p/107671711本文为学习LearnOpenGL的学习笔记,如有书写和理解错误还请大佬扶正;窗口教程链接:https://link.zhihu.com/?target=https%3A//learnopengl-cn.github.io/01%2520Getting%2520starte...

weixin_39751453的博客 171

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

学习OpenGL 二、入门(1)窗口搭建

本文档主要使用glfw和glad进行开发。

ntmbdwp302159902的博客 767

【LearnOpenGL入门学习记录】1、创建窗口

LearnOpenGL学习笔记,记录API、渲染流程及编码过程中遇到的问题

qq_43070853的博客 839

LearnOpenGL 之创建窗口

LearnOpenGL 之创建窗口

weixin_45520744的博客 873

LearnOpenGl(一)创建窗口

GLFW是一个开源的、多平台的库,用于创建窗口、接收输入和处理事件。它提供了一个简单易用的API,使得开发者能够快速地创建和管理窗口,而无需关心底层操作系统的细节。跨平台支持:GLFW支持Windows、macOS和Linux等多个操作系统,为开发者提供了统一的接口来处理不同平台的窗口创建和管理。易于集成:GLFW与OpenGL、DirectX和Vulkan等图形API紧密集成,方便开发者在不同的渲染上下文中使用。事件处理:GLFW能够处理键盘、鼠标等输入设备的事件,使得开发者可以轻松地实现用户交互。

dont worry about it的博客 1万+

LearnOpenGL(一)——环境搭建及OpenGL窗口的创建

OpenGL环境搭建、窗口创建

m0_67555362的博客 873

OpenGL入门学习笔记(二)---- 创建窗口

学习参考网站。

qq_60989610的博客 1021

【OpenGL学习笔记】2.创建窗口

OpenGL创建窗口简单流程,初始化GLFW,创建对应窗口,初始化CLAD,设置视口和回调函数,设置渲染循环,结束释放资源。

zhq1943的专栏 245

OpenGL学习之各种流程及函数详解——基于LearnOpenGL(持续更新)

这篇博客主要是记录在学习LearnOpenGL过程中遇到的函数,以及流程问题,越学到后面越感觉混乱,因此做个记录。由于本博客的特殊性,不会有详细说明,如果想了解更多可以阅读或者在博客下方评论,也可以私信博主。此外为了督促,博主决定,一周至少更新一小章,如果本文有幸被各位看到,欢迎各位催更!

qq_43419761的博客 1531

【LearnOpenGL基础入门——2】搭建第一个OpenGL窗口

搭建第一个OpenGL窗口

尘海折柳的博客 2057

LearnOpenGL从入门到入魔(1):OpenGL简介

总目录 LearnOpenGL从入门到入魔(1):OpenGL简介与环境搭建 LearnOpenGL从入门到入魔(2):OpenGL基本使用 LearnOpenGL从入门到入魔(3):着色器,纹理 LearnOpenGL从入门到入魔(4):坐标系统,摄像机 LearnOpenGL从入门到入魔(5):光照(光照基础,材质) LearnOpenGL从入门到入魔(6):光照(光照贴图,投光物) 1. OpenGL简介  OpenGL本身并不是一个API,它仅仅是一个由Khronos组织制定并维护的规范(Speci

老蒋也疯狂 4502
上一篇: 计算机图形学--阴影1--PCSS算法
下一篇: LearnOpenGL学习笔记——OpenGL绘制三角形
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值