GLFW

GLFW (Graphics Library Framework)是一个开源跨平台库,提供了一些API,比如说创建窗口,接收事件,可以配合OpenGL使用

  1. 下载:在https://github.com/glfw/glfw/releases/中下载库,这里我下载的是3.3.9版本的

Glad

Glad:加载显卡厂商对OpenGL实现的驱动接口

  1. 下载:在https://glad.dav1d.de/进行下载,这里我下载的是4.6版本的
    image

GLM

GLM定义了很多实用的数学运算,这里版本为GLM1.0.1

CMAKE配置

  1. 配置如下所示:
cmake_minimum_required(VERSION 3.20)
# 注意不要加上LANGUAGES CXX,因为项目中编译了xxx.c文件。坑
project(OpenGL_Test VERSION 1.0 )

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

#源文件列表
file(GLOB PROJECT_SOURCES
    "${CMAKE_SOURCE_DIR}/src/*.cpp"
    "${CMAKE_SOURCE_DIR}/src/*.c"
)
add_executable(${PROJECT_NAME} ${PROJECT_SOURCES})

target_include_directories(${PROJECT_NAME} PRIVATE
	"${CMAKE_SOURCE_DIR}/thirdParty/include"
)

target_link_libraries(${PROJECT_NAME} PRIVATE
	"${CMAKE_SOURCE_DIR}/thirdParty/lib/glfw3.lib"
)


  1. 测试程序如下所示:
#include <iostream>

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


/**
*	@param width The new width
*	@param height The new height
*/
void frameBufferSizeCallBack(GLFWwindow* window, int width, int height) {
	std::cout << "窗体最新大小:" << width << " , " << height << std::endl;
}


/**
*	@param window 接收事件的窗口
*	@param key 键盘上按下或者抬起的键
* 	@param scancode scancode of the key
*   @param action 按键的行为,比如说GLFW_PRESS, GLFW_RELEASE or GLFW_REPEAT
*   @param mods 用于判断modifier keys是否按下
*/
void keyCallBack(GLFWwindow* window, int key, int scancode, int action, int mods) {
	if (key == GLFW_KEY_W) {
		//触发了w
	}
	if (action == GLFW_PRESS) {
		//键位按下
	}
	if (action == GLFW_RELEASE) {
		//键位抬起
	}
	if (mods & GLFW_MOD_CONTROL) {
		//按下ctrl的同时,按下了key
	}
	if (mods & GLFW_MOD_SHIFT) {
		//按下shift的同时,按下了key
	}
}

int main() {
	//1 初始化GLFW基本环境
	glfwInit();
	//1.1 设置OpenGL主版本号、次版本号
	glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4);
	glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 6);
	//1.2 设置OpenGL启用核心模式(非立即渲染模式)
	glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

	//2 创建窗体对象
	GLFWwindow* window = glfwCreateWindow(800, 600, "OpenGLTest", NULL, NULL);
	
	// 将指定窗口的OpenGL上下文与当前调用线程关联起来。
	glfwMakeContextCurrent(window);

	//设置窗体大小变化事件的回调
	glfwSetFramebufferSizeCallback(window, frameBufferSizeCallBack);
	//设置按键事件产生的回调
	glfwSetKeyCallback(window, keyCallBack);


	//3 执行窗体循环
	while (!glfwWindowShouldClose(window)) {
		// 处理事件队列中的事件,比如说窗口大小改变,按键事件
		glfwPollEvents();
	}


	//4 退出程序前做相关清理
	glfwTerminate();

	return 0;
}
  1. 如果环境搭建成功,则运行如下所示:
    image