本工程是一套由浅到深、由易到难的 OpenGL 学习教程,覆盖从入门到进阶的核心主题。 每个章节包含:详细的理论讲解文档(README.md)、完整可编译的 Demo 代码、以及一键编译运行脚本(prjBuild.sh)。
LearnOpenGL/
├── common/ # 公共依赖(着色器工具、摄像机、网格、模型加载等)
│ ├── glad.c # GLAD OpenGL函数加载器实现
│ ├── glad/glad.h # GLAD头文件
│ ├── stb_image.h # 图片加载库
│ ├── stb_image.cpp # stb_image实现
│ ├── Shader.h # 着色器封装类
│ ├── Camera.h # 摄像机系统
│ ├── Mesh.h # 网格类
│ └── Model.h # 模型加载类(基于ASSIMP)
│
├── 01-Basics/ # OpenGL基础概念与环境搭建
│ ├── 01.Environment/ # 环境搭建与OpenGL概述
│ ├── 02.Window/ # 创建GLFW窗口
│ ├── 03.Triangle/ # 绘制第一个三角形(VAO/VBO/EBO)
│ ├── 04.Shader/ # 着色器基础(GLSL/uniform)
│ ├── 05.Texture/ # 纹理映射(stb_image/多纹理)
│ ├── 06.Transform/ # 变换与坐标系统(MVP矩阵)
│ └── 07.Camera/ # 摄像机系统(WASD+鼠标)
│
├── 02-Lighting/ # 实时光照核心原理
│ ├── 01.Color/ # 颜色模型与光照入门
│ ├── 02.BasicLighting/ # Phong光照模型
│ ├── 03.Material/ # 材质系统
│ ├── 04.LightingMap/ # 光照贴图(漫反射/镜面光/发射)
│ └── 05.MultiLight/ # 多光源场景(平行光/点光/聚光)
│
├── 03-Advanced/ # 高级渲染技术
│ ├── 01.Blending/ # 混合与透明
│ ├── 02.FaceCulling/ # 面剔除与深度测试
│ ├── 03.Framebuffer/ # 帧缓冲与后处理
│ ├── 04.Cubemap/ # 天空盒与环境映射
│ ├── 05.Shadow/ # 阴影映射与PCF软阴影
│ └── 06.ModelLoading/ # 模型加载(ASSIMP)
│
├── 04-AdvancedTech/ # 高级OpenGL特性
│ ├── 01.Instancing/ # 实例化渲染
│ ├── 02.AntiAliasing/ # 抗锯齿技术(MSAA)
│ ├── 03.GammaCorrection/ # Gamma校正与颜色空间
│ ├── 04.StencilTest/ # 模板测试(轮廓高亮)
│ ├── 05.GeometryShader/ # 几何着色器(爆炸/法线可视化)
│ └── 06.AdvancedGL/ # 高级数据(UBO/SSBO/Transform Feedback)
│
└── Demo/ # 原始学习Demo(参考)
学习 OpenGL 的基础概念,搭建开发环境,理解渲染管线的基本组成。
| 章节 | 主题 | 核心概念 |
|---|---|---|
| 01 | Environment | OpenGL概述、环境搭建、库介绍 |
| 02 | Window | GLFW窗口创建、GLAD初始化、渲染循环 |
| 03 | Triangle | VAO/VBO/EBO、顶点属性、绘制调用 |
| 04 | Shader | GLSL语法、顶点/片段着色器、uniform/attribute |
| 05 | Texture | 纹理坐标、stb_image、纹理参数、多纹理 |
| 06 | Transform | 平移/旋转/缩放、模型/视图/投影矩阵 |
| 07 | Camera | 欧拉角、WASD移动、鼠标视角、Camera类 |
学习实时光照的核心原理,从简单颜色到完整的多光源场景。
| 章节 | 主题 | 核心概念 |
|---|---|---|
| 08 | Color | 颜色模型、顶点颜色插值、光照入门 |
| 09 | BasicLighting | 环境光/漫反射/镜面光(Phong模型) |
| 10 | Material | 材质属性、光照与材质分离 |
| 11 | LightingMap | 漫反射贴图/镜面光贴图/发射贴图 |
| 12 | MultiLight | 平行光/点光源/聚光灯、多光源代码组织 |
掌握高级渲染技术,提升视觉质量和场景复杂度。
| 章节 | 主题 | 核心概念 |
|---|---|---|
| 13 | Blending | Alpha混合、片段丢弃、透明排序 |
| 14 | FaceCulling | 深度测试、Z-fighting、面剔除、绕序 |
| 15 | Framebuffer | FBO、颜色/深度/模板附件、后处理效果 |
| 16 | Cubemap | 天空盒、环境映射、反射与折射 |
| 17 | Shadow | 深度贴图、阴影渲染、PCF软阴影 |
| 18 | ModelLoading | ASSIMP模型加载、Mesh/Model类 |
深入高级 OpenGL 特性,优化渲染性能和质量。
| 章节 | 主题 | 核心概念 |
|---|---|---|
| 19 | Instancing | 实例化渲染、性能优化 |
| 20 | AntiAliasing | MSAA、离屏MSAA、后处理抗锯齿 |
| 21 | GammaCorrection | Gamma概念、sRGB、颜色空间 |
| 22 | StencilTest | 模板函数、轮廓高亮、地面阴影 |
| 23 | GeometryShader | 几何着色器、爆炸效果、法线可视化 |
| 24 | AdvancedGL | UBO、SSBO、Transform Feedback |
sudo apt-get install build-essential cmake git
sudo apt-get install libglfw3-dev libgl1-mesa-dev
sudo apt-get install libglm-dev libassimp-dev- GLFW 3.x — 窗口管理与输入处理
- GLAD — OpenGL函数加载器(OpenGL 3.3 Core Profile)
- GLM — OpenGL数学库(向量、矩阵运算)
- stb_image — 图片加载(支持JPG/PNG/BMP等)
- ASSIMP — 3D模型加载(FBX/OBJ/GLTF等)
每个章节目录下都有 prjBuild.sh 脚本:
cd 01-Basics/03.Triangle
chmod +x prjBuild.sh
./prjBuild.sh脚本会自动编译并运行当前 Demo。
- 按顺序学习:章节之间有前后依赖,建议从 01 开始依次学习
- 动手实验:修改代码参数,观察渲染效果变化
- 对比文档:先阅读 README.md 理解理论,再看代码实现
- 查阅源码:
common/目录下的工具类是理解工程化 OpenGL 的好材料
- LearnOpenGL.com — 最全面的 OpenGL 教程
- OpenGL Wiki — OpenGL 官方文档
- GLFW Documentation — GLFW API 文档
- GLM Documentation — GLM 数学库文档