imgui-cubic-example

OpenGL 骨架程序

Github Repository

一个具有着色器管理和UI控制的现代OpenGL应用程序骨架。

功能特点

依赖项

必需的库

安装说明 (Ubuntu/WSL2)

# 更新软件包列表
sudo apt-get update

# 安装OpenGL开发文件
sudo apt-get install libgl1-mesa-dev

# 安装GLEW
sudo apt-get install libglew-dev

# 安装GLFW3
sudo apt-get install libglfw3-dev

# 安装GLM
sudo apt-get install libglm-dev

# 安装ImGui
sudo apt-get install libimgui-dev

# 安装SimpleIni
sudo apt-get install libsimpleini-dev

# 安装ICU (用于SimpleIni的Unicode支持)
sudo apt-get install libicu-dev

构建说明

# 创建构建目录,使用CMake配置
cmake -B build

# 构建
cmake --build build

# 运行
./build/opengl_skeleton

使用说明

  1. 运行程序:
./build/opengl_skeleton
  1. 控制方式:
    • 鼠标左键:轨道相机
    • 鼠标右键:平移相机
    • 鼠标滚轮:缩放相机
    • UI控制:实时调整着色器参数
  2. 着色器配置:
    • 编辑 shader_config.ini 修改着色器参数
    • 更改实时生效
    • 着色器文件位于 shaders/vertexshaders/fragment 目录

库文件查找方法

在CMake中,有两种主要的方法来查找和链接外部库:find_packagepkg-config。本项目同时使用了这两种方法,下面详细介绍它们的区别和使用场景。

find_package 方法

find_package 是CMake原生的库查找机制,它通过查找和加载CMake模块来定位库文件。

工作原理

  1. CMake会在预定义的路径中查找名为 Find<包名>.cmake 的模块文件
  2. 如果找到,则执行该模块文件,该模块会设置一系列变量(如 <包名>_INCLUDE_DIRS<包名>_LIBRARIES 等)
  3. 如果没找到,则尝试使用 <包名>Config.cmake 文件(通常由库的开发者提供)

使用示例

# 查找OpenGL库
find_package(OpenGL REQUIRED)

# 查找GLEW库
find_package(GLEW REQUIRED)

# 查找GLFW3库
find_package(glfw3 REQUIRED)

# 查找GLM库
find_package(glm REQUIRED)

优点

缺点

pkg-config 方法

pkg-config 是一个用于从已安装的库中检索编译和链接参数的工具,在Linux系统上广泛使用。

工作原理

  1. pkg-config读取 .pc 文件(通常位于 /usr/lib/x86_64-linux-gnu/pkgconfig
  2. 这些文件包含了库的编译和链接信息
  3. CMake通过 pkg_check_modules 命令调用pkg-config获取这些信息

使用示例

# 启用pkg-config支持
find_package(PkgConfig REQUIRED)

# 查找ImGui库
pkg_check_modules(IMGUI REQUIRED imgui)

# 查找SimpleIni库
pkg_check_modules(SIMPLEINI REQUIRED simpleini)

优点

缺点

target_include_directories(${PROJECT_NAME} PRIVATE
    ${IMGUI_INCLUDE_DIRS}  # 添加IMGUI头文件目录
    ${SIMPLEINI_INCLUDE_DIRS}  # 添加SimpleIni头文件目录
)

target_link_libraries(${PROJECT_NAME} PRIVATE
    ${IMGUI_LIBRARIES}  # 添加IMGUI库
    ${SIMPLEINI_LIBRARIES}  # 添加SimpleIni库
)

两种方法的结合使用

在本项目中,我们结合使用了这两种方法:

这种组合使用可以充分利用两种方法的优点,提高项目的兼容性和可移植性。

CMakeLists.txt 函数详解

cmake_minimum_required

project

set

cmake_policy

find_package

pkg_check_modules

add_executable

add_definitions

target_include_directories

add_custom_command

许可证

本项目采用 MIT 许可证 - 详见 LICENSE 文件