OpenGL 开发环境搭建
OpenGL 环境搭建
概述
本文介绍在 Windows 11 + Visual Studio 2022 环境下搭建 OpenGL 开发环境的方法。
GLFW:配合OpenGL使用的轻量级工具程序库
GLAD:加载OpenGL函数指针(解决不同显卡驱动兼容性问题)
环境说明
- 操作系统:Windows 11
- 开发工具:Visual Studio 2022
- GLFW版本:3.4
- OpenGL版本:4.6
配置步骤
方式一:使用预编译版本
GLFW 官方提供预编译的二进制包,无需手动 CMake 编译。
下载 GLFW 预编译包
-
下载 Binary package
解压文件
解压后目录结构如下:
glfw-3.4.bin.WIN64/
├── include/
│ └── GLFW/
│ ├── glfw3.h
│ └── ...
├── lib-vc2022/
│ ├── glfw3.lib
│ └── glfw3.dll
方式二:使用 CMake 手动编译 GLFW
如果需要自定义编译选项(如静态链接),可以手动编译。
下载GLFW源代码
- 从GLFW官网下载
Source package
https://www.glfw.org/download.html
- 解压缩glfw-3.4.zip文件(2025/06/12,最新版本号:3.4)
下载CMake
- 从CMake官网下载
installer
https://cmake.org/
- 安装
使用 CMake 构建 GLFW
- 打开 CMake 程序
Where is the source code(源代码目录):glfw-3.4.zip文件 解压的路径
Where to build the binaries(存放编译结果的目标文件目录):glfw-3.14/build
- 点击Configure按钮,选择工程的生成器的版本号 (Visual Studio 2022)
- Configuring done
- 点击Generate按钮
- Generate done
- 点击Open Project按钮
- 构建项目
- 打开项目所在目录
- 进入src/Debug目录
- 复制编译目标文件
- 粘贴到自定义的存放类库文件的目录
可以存放到任意目录,后续获取类库文件时,只要设置该目录即可。此处我存放到 C:\OpenGL\libs 目录下。
- 复制 glfw-3.4/include 目录下的 GLFW 目录
- 将 GLFW 目录拷贝到自定义的存放头文件的目录
可以存放到任意目录,后续获取头文件时,只要设置该目录即可。此处我存放到 C:\OpenGL\include 目录下。
配置 GLAD
GLAD 是 OpenGL 函数加载器,需要根据使用的 OpenGL 版本在线生成。
- 打开GLAD在线服务
https://glad.dav1d.de/
- 生成GLAD文件
- 下载 glad.zip 文件
- 解压缩 glad.zip 文件,打开 glad/include 目录
- 将glad/include 目录下的所有文件拷贝到自定义的目录下
可以存放到任意目录,后续获取头文件时,只要设置该目录即可。此处我存放到 C:\OpenGL\include 目录下。
配置 Visual Studio 项目
创建 C++ 空项目
- 打开 Visual Studio 2022,点击 Create New Project
- 创建 C++ Empty Project
- 打开工程属性
- 选择VC++ Directories选项卡
- 点击 Include Directories 右侧的目录选择框
- 在弹出框中,新建 New Line
- 输入 C:\OpenGL\include (配置 GLAD章节 第五步 的头文件目录),同样地在 Libray Directories 项目输入 C:\OpenGL\libs (构建GLFW 第十步 的类库文件目录)
- 选择 Linker 选项卡,点击 Input 选项
- 点击 Additional Dependencies 右侧的下拉框
- 在弹出框中输入 glfw3.lib opengl32.lib
- 点击确定
编写第一个 OpenGL 程序
- 将 glad.zip 解压后的 glad (配置GLAD章节 第四步) 目录下的 /src/glad.c文件拷贝到 C++ 项目中
- 拷贝到 C++ 项目的 Source Files 目录下
- 新建 main.cpp 文件
- 在 main.cpp 文件中输入如下代码:
#include <glad/glad.h>
#include <GLFW/glfw3.h>
#include <iostream>
void framebuffer_size_callback(GLFWwindow* window, int width, int height)
{
glViewport(0, 0, width, height);
}
void processInput(GLFWwindow* window)
{
if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS)
glfwSetWindowShouldClose(window, true);
}
int main()
{
glfwInit();
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);
if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
{
std::cout << "Failed to initialize GLAD" << std::endl;
return -1;
}
glViewport(0, 0, 800, 600);
glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);
while (!glfwWindowShouldClose(window))
{
processInput(window);
glfwSwapBuffers(window);
glfwPollEvents();
}
glfwTerminate();
return 0;
}
- 运行
- 弹出 LearnOpenGL 黑色窗口,点击黑框,按 ESC 键,窗口关闭
CMake 管理
额外说明:若希望项目更易于移植,推荐使用 CMake 来管理项目
项目目录结构
创建如下目录结构:
OpenGLProject/
├── CMakeLists.txt # CMake 配置文件
├── src/
│ ├── main.cpp # 主程序入口
│ └── glad.c # GLAD 源文件
└── include/
├── GLFW/ # GLFW 头文件
├── glad/ # GLAD 头文件
└── KHR/ # KHR 头文件
使用 FetchContent 自动下载 GLFW
cmake_minimum_required(VERSION 3.15)
project(GLDiagram
VERSION 1.0.0
DESCRIPTION "OpenGL Drawing Canvas"
LANGUAGES C
)
# ---------- C 标准 ----------
set(CMAKE_C_STANDARD 11)
set(CMAKE_C_STANDARD_REQUIRED ON)
# ---------- 输出目录 ----------
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
# ---------- FetchContent ----------
include(FetchContent)
# ---------- 下载 GLFW ----------
FetchContent_Declare(
glfw
GIT_REPOSITORY https://github.com/glfw/glfw.git
GIT_TAG 3.3.9
)
FetchContent_MakeAvailable(glfw)
# ---------- 查找 OpenGL ----------
find_package(OpenGL REQUIRED)
# ---------- 源文件 ----------
set(SOURCES
src/main.c
src/glad.c
)
# ---------- 可执行文件 ----------
add_executable(${PROJECT_NAME} ${SOURCES})
# ---------- 头文件目录 ----------
target_include_directories(${PROJECT_NAME} PRIVATE
include
)
# ---------- 链接库 ----------
target_link_libraries(${PROJECT_NAME} PRIVATE
glfw
OpenGL::GL
)
# ---------- Windows 额外库 ----------
if(WIN32)
target_link_libraries(${PROJECT_NAME} PRIVATE
gdi32
)
endif()
# ---------- Linux ----------
if(UNIX AND NOT APPLE)
target_link_libraries(${PROJECT_NAME} PRIVATE
pthread
dl
)
endif()
# ---------- 构建信息 ----------
message(STATUS "----------------------------------")
message(STATUS "Project: ${PROJECT_NAME}")
message(STATUS "Version: ${PROJECT_VERSION}")
message(STATUS "System: ${CMAKE_SYSTEM_NAME}")
message(STATUS "Compiler: ${CMAKE_C_COMPILER}")
message(STATUS "----------------------------------")
构建步骤
# 1. 创建构建目录
mkdir build
cd build
# 2. 配置项目
cmake ..
# 3. 编译
cmake --build .
# 4. 运行
./bin/OpenGLProject
总结
综上,将头文件和类库文件放在不同目录中,让C++项目可以访问这些文件路径即可。
文章声明
内容准确性: 我会尽力确保所分享信息的准确性和可靠性,但由于个人知识有限,难免会有疏漏或错误。如果您在阅读过程中发现任何问题,请不吝赐教,我将及时更正。
posted on 2025-06-12 20:37 wubing7755 阅读(1507) 评论(0) 收藏 举报
浙公网安备 33010602011771号