# learnOpengl2 **Repository Path**: wangyxli/learnOpengl2 ## Basic Information - **Project Name**: learnOpengl2 - **Description**: opengl高级进阶 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2026-03-24 - **Last Updated**: 2026-08-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 现代 OpenGL 高级渲染实战教程 ## 📚 教程概览 本教程深入讲解现代 OpenGL (Core Profile 4.6+) 的高级渲染特性,从物理光学原理出发,结合工业级 C++ 代码实现。 ## 🎯 核心特性 - **伽马校正** - 理解颜色空间与人眼感知 - **HDR 渲染** - 高动态范围与色调映射 - **高级混合** - 透明度与排序技术 - **PBR 光照** - 基于物理的渲染 - **延迟渲染** - 多光源高效渲染 ## 📂 目录结构 ``` learnOpengl2/ ├── docs/ # 📖 深度原理文档 │ ├── 01_gamma_correction.md │ ├── 02_hdr_tone_mapping.md │ ├── 03_blending_sorting.md │ ├── 04_pbr_lighting.md │ └── 05_deferred_shading.md │ ├── examples/ # 💻 可运行代码示例 │ ├── common/ # 🔧 公共工具库 │ │ ├── shader.h/cpp │ │ ├── framebuffer.h/cpp │ │ ├── post_processor.h/cpp │ │ └── camera.h/cpp │ │ │ ├── 01_gamma_correction/ │ ├── 02_hdr_tone_mapping/ │ ├── 03_advanced_blending/ │ ├── 04_pbr_lighting/ │ └── 05_deferred_shading/ │ └── CMakeLists.txt # 根构建配置 ``` ## 🔨 编译要求 - **C++ 标准**: C++17 或更高 - **依赖库**: GLFW 3.3+, GLAD, GLM 0.9.9+ - **构建工具**: CMake 3.16+ - **显卡要求**: OpenGL 4.6 Core Profile ## 🚀 快速开始 ### 1. 安装依赖 #### Windows (vcpkg) ```bash vcpkg install glfw3 glm ``` #### macOS (Homebrew) ```bash brew install glfw glm ``` #### Ubuntu/Debian ```bash sudo apt install libglfw3-dev libglm-dev ``` ### 2. 构建项目 ```bash mkdir build cd build cmake .. make ``` ### 3. 运行示例 ```bash # 伽马校正演示 ./examples/01_gamma_correction/GammaCorrection # HDR 色调映射演示 ./examples/02_hdr_tone_mapping/HDRToneMapping ``` ## 📖 学习路径 ``` 基础概念 → 伽马校正 → HDR管线 → 混合技术 → PBR理论 → 延迟渲染 ↓ ↓ ↓ ↓ ↓ ↓ 光学原理 颜色空间 动态范围 透明渲染 微表面 多光源 ``` ## 🎮 交互控制 ### 通用控制 - `WASD` - 相机移动 - `鼠标` - 视角旋转 - `滚轮` - 缩放 - `ESC` - 退出 ### 伽马校正示例 - `G` - 切换伽马校正开关 - `1/2/3` - 切换伽马值 (1.8/2.2/2.4) - `Space` - 切换对比显示模式 ### HDR 色调映射示例 - `H` - 切换 HDR 开关 - `1/2/3/4` - 切换色调映射算法 - `↑/↓` - 调节曝光度 - `R` - 重置参数 - `Space` - 暂停/继续动画 ## 📚 文档内容 每篇文档包含: - **物理/视觉原理** - 从光学和人眼感知角度解释 - **数学模型** - 详细的公式推导 - **OpenGL 实现策略** - 具体的代码实现 - **性能权衡** - 不同方案的优缺点 - **常见视觉瑕疵与修复** - 实际问题的解决方案 ## 🔬 核心概念 ### 伽马校正 - 人眼对暗部更敏感的非线性感知 - sRGB 空间 vs 线性空间的本质区别 - 为什么光照计算必须在线性空间进行 ### HDR 与色调映射 - 真实世界光照强度的巨大范围 (10^9:1) - 浮点帧缓冲存储 HDR 值 - Reinhard/ACES/Uncharted2 色调映射算法 ### PBR 光照 - 微表面理论与能量守恒 - Cook-Torrance BRDF 模型 - 菲涅尔效应与金属度工作流 ### 延迟渲染 - G-Buffer 存储几何信息 - 屏幕空间光照计算 - 支持大量动态光源 ## 🛠️ 技术栈 - **语言**: C++17/20 - **图形 API**: OpenGL 4.6 Core Profile - **窗口管理**: GLFW 3.3 - **数学库**: GLM 0.9.9+ - **OpenGL 加载**: GLAD ## 📝 注意事项 1. 确保显卡支持 OpenGL 4.6 2. 所有光照计算在线性空间进行 3. 纹理加载时区分 sRGB 和线性格式 4. HDR 渲染需要浮点帧缓冲支持