GLFW
GLFW (Graphics Library Framework)是一个开源跨平台库,提供了一些API,比如说创建窗口,接收事件,可以配合OpenGL使用
- 下载:在https://github.com/glfw/glfw/releases/中下载库,这里我下载的是3.3.9版本的
Glad
Glad:加载显卡厂商对OpenGL实现的驱动接口
- 下载:在https://glad.dav1d.de/进行下载,这里我下载的是4.6版本的
![image]()
GLM
GLM定义了很多实用的数学运算,这里版本为GLM1.0.1
CMAKE配置
- 配置如下所示:
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"
)
- 测试程序如下所示:
#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;
}
- 如果环境搭建成功,则运行如下所示:
![image]()


浙公网安备 33010602011771号