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

最近看完了GAMES101,接下来准备熟悉一下图形API~
先从OpenGL入手,找到了网站 LearnOpenGL
在此简要的记录一下,方便以后查阅
完整代码:https://gitee.com/Duo1J/learn-open-gl

一、环境配置

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.3
	glfwWindowHint(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窗口创建
下接: https://blog.csdn.net/weixin_44506615/article/details/149864439?spm=1001.2014.3001.5501

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值