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

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

最近看完了GAMES101,接下来准备熟悉一下图形API~
先从OpenGL入手,找到了网站 LearnOpenGL
在此简要的记录一下,方便以后查阅

一、环境配置

1. GLFW
GLFW是一个针对OpenGL的C语言库,它提供了一些渲染所需的最低限度的接口。我们可以通过它创建OpenGL上下文、定义窗口以及处理用户输入等。
可以在 GLFW 上下载源码或是编译好的文件

2.GLAD
实际上OpenGL是一个标准或是规范,其具体的实现是由驱动开发商针对不同的显卡实现的。因而OpenGL大多数的函数位置都无法在编译时确定下来,需要我们在运行时进行查询。并且在不同的平台上,取得函数地址的方法也不同,如Windows平台:

// 定义函数原型
typedef void (*GL_GENBUFFERS) (GLsizei, GLuint*);
// 找到正确的函数并赋值给函数指针
GL_GENBUFFERS glGenBuffers  = (GL_GENBUFFERS)wglGetProcAddress("glGenBuffers");
// 现在函数可以被正常调用了
GLuint buffer;
glGenBuffers(1, &buffer);

GLAD就是帮我们简化和封装这个过程的一个库,我们可以在 GLAD 上生产库文件
本文以版本3.3为例,Profile设置为Core并勾选Generate a loader后点击Generate

3.VS工程
接下来创建一个VS C++ 空工程,取名为OpenGLRenderer
在这里插入图片描述
然后右键项目属性在VC++目录中设置我们的头文件包含目录以及Lib目录,将GLFW和GLAD配置进去
OpenGL环境配置
然后选择链接器,在附加依赖项中配置glfw3.libopengl32.lib
对于Windows平台,opengl32.lib已经包含进Microsoft SDK中了,尽管它的名称中包含32,但是64位的版本也是用它
OpenGL环境配置
到这一步,环境配置就完成了~

二、窗口创建

直接上代码

#include <iostream>// 注意顺序,glad中有依赖检查
// 顺序错误编译会报错 #error:  OpenGL header already included, remove this include, glad already provides it
#include <glad/glad.h>
#include <GLFW/glfw3.h>// 输入处理
void ProcessInput(GLFWwindow* window)
{if (glfwGetKey(window, GLFW_KEY_ESCAPE)){glfwSetWindowShouldClose(window, true);}
}// 窗口大小改变回调
void OnSetFrameBufferSize(GLFWwindow* window, int width, int height)
{glViewport(0, 0, width, height);
}int main()
{// glfw初始化glfwInit();// glfw设置OpenGL版本为3.3glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);// glfw设置OpenGL为核心(Core)模式// 核心模式相较于立即渲染模式(Immediate mode,也就是固定渲染管线,现已废弃),拥有更高的灵活性glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);// 创建一个窗口对象GLFWwindow* window = glfwCreateWindow(1280, 720, "OpenGLRenderer", NULL, NULL);if (window == NULL){std::cout << "Failed to create GLFW window" << std::endl;glfwTerminate();return -1;}// 设置为当前上下文glfwMakeContextCurrent(window);// 初始化glad加载器if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)){std::cout << "Failed to initialize GLAD" << std::endl;return -1;}// 注册窗口大小改变回调glfwSetFramebufferSizeCallback(window, OnSetFrameBufferSize);// 主循环while (!glfwWindowShouldClose(window)){// 清屏glClearColor(0.2f, 0.3f, 0.3f, 1.0f);glClear(GL_COLOR_BUFFER_BIT);// 输入处理ProcessInput(window);// ...之后会做其他事情// 双缓冲切换glfwSwapBuffers(window);// 检查事件触发,如窗口大小改变,调用对应回调函数glfwPollEvents();}// 资源清理glfwTerminate();return 0;
}

编译执行,顺利的话会看见以下窗口
GLFW窗口创建

http://www.dtcms.com/a/311183.html

相关文章:

  • RS232转Profinet网关与西门子S7-1200 PLC的智能化工业通信应用
  • 区块链笔记
  • 李宏毅NLP-10-语音分离
  • (1-8-1) Java -XML
  • 关于Web前端安全防御XSS攻防的几点考虑
  • Unity_数据持久化_XML存储相关
  • 第三十九章:AI导演的“魔法时间轴”:文生视频与Video Latent扩散结构
  • [ LeetCode-----盛最多的水]
  • c++ 链表知识汇总
  • FreeRTOS源码分析一:task创建(RISCV架构)
  • 【Pytorch✨】LSTM 入门
  • 用 Qt 打造优雅的密码输入框:添加右侧眼睛图标切换显示
  • 云环境K8s集群WebSocket连接失败解决方案
  • 深入解析 <component :is> 在 Vue3 组合式中的使用与局限
  • 关于Web前端安全防御之点击劫持的原理及防御措施
  • Docker容器中文PDF生成解决方案
  • JavaScript特殊集合WeakMap 的使用及场景介绍
  • C++ lambda表达式与线程库
  • String boot 接入 azure云TTS
  • 20250802安装CP2102N的驱动程序(适配飞凌的OK3576-C)
  • 如何在Ubuntu上部署excalidraw
  • Seal Report:一款免费开源的报表工具
  • 使用 BERT 的 NSP 实现语义感知切片 —— 提升 RAG 系统的检索质量
  • 计算机网络:什么是任播
  • 【计算机网络】Socket网络编程
  • 从零开始构建AI Agent评估体系:12种LangSmith评估方法详解
  • QUdpSocket 详解:从协议基础、通信模式、数据传输特点、应用场景、调用方式到实战应用全面解析
  • Linux网络编程【基于UDP网络通信的字典翻译服务】
  • M|银翼杀手
  • Web 开发 10