# opengl-vulkan-quick-learning **Repository Path**: luzhihaoTestingLab/opengl-vulkan-quick-learning ## Basic Information - **Project Name**: opengl-vulkan-quick-learning - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-06-27 - **Last Updated**: 2026-07-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # OpenGL & Vulkan 快速学习 一套从零开始的图形学学习课程,涵盖 OpenGL 4.6 和 Vulkan 两大主流图形 API。 ## 课程结构 ``` opengl-vulkan-quick-learning/ ├── README.md # 本文件 ├── .gitignore # Git 忽略规则 ├── docs/ # 课程文档(24课) │ ├── 00-课程总览.md │ ├── 01-环境搭建与第一个三角形.md │ ├── ... │ └── 24-Vulkan进阶技术与学习路线.md └── phase1/ # 阶段一实验代码框架(OpenGL 基础) ├── CMakeLists.txt ├── common/ # 公共库 │ ├── Shader.h/cpp # 着色器封装 │ ├── Texture.h/cpp # 纹理封装 │ ├── Camera.h/cpp # 摄像机 │ ├── Mesh.h/cpp # 网格 │ └── Model.h/cpp # Assimp 模型加载 ├── lesson01/ # 第1课:第一个三角形 ├── lesson02/ # 第2课:着色器与GLSL ├── lesson03/ # 第3课:纹理映射 ├── lesson04/ # 第4课:变换与3D投影 ├── lesson05/ # 第5课:深度测试与面剔除 ├── lesson06/ # 第6课:Phong光照模型 ├── lesson07/ # 第7课:模型加载(Assimp) └── lesson08/ # 第8课:帧缓冲与后处理 ``` ## 课程路线图(24课) | 阶段 | 课程 | 主题 | |------|------|------| | **一:OpenGL 基础** | 第1-8课 | 环境搭建 → 着色器 → 纹理 → 3D投影 → 深度/面剔除 → Phong光照 → 模型加载 → 帧缓冲后处理 | | **二:OpenGL 进阶** | 第9-12课 | 实例化渲染 → 阴影映射 → 法线贴图/PBR → 综合项目 | | **三:Vulkan 基础** | 第13-20课 | 环境搭建 → 实例/设备 → 交换链 → 渲染通道 → 着色器/管线 → 命令缓冲 → 描述符集 → 纹理采样 | | **四:Vulkan 进阶** | 第21-24课 | 深度/MSAA → 综合项目 → 计算着色器 → 进阶技术路线 | ## 前置知识 - C++17 基础(智能指针、STL 容器、lambda) - 基础线性代数(向量、矩阵乘法) - 无图形编程经验要求 ## 环境搭建 ### 依赖库 | 库 | 用途 | 安装方式 | |----|------|---------| | GLFW 3.x | 窗口创建与输入处理 | vcpkg / 手动编译 | | GLAD | OpenGL 函数加载 | [在线生成](https://glad.dav1d.de/) | | GLM | 数学库(仅头文件) | vcpkg / 手动下载 | | Assimp 5.x | 3D模型导入 | vcpkg | | stb_image | 图片加载(仅头文件) | [GitHub](https://github.com/nothings/stb) | | Vulkan SDK | Vulkan 开发 | [LunarG SDK](https://vulkan.lunarg.com/) | ### 快速开始(手动编译) 本项目使用预编译/手动编译的第三方库,放置在 `3rd/` 目录下。 #### 1. 目录结构 ``` 3rd/ ├── glfw-3.4.bin.WIN64/ # GLFW 预编译包 ├── glm/ # GLM 头文件 ├── glad/ # GLAD 源码 ├── assimp/ # Assimp 源码 + 编译产物 └── zlib/ # zlib 预编译包(Assimp 依赖) ``` #### 2. 编译 Assimp Assimp 需要从源码编译(静态库模式): ```powershell cd 3rd/assimp mkdir build cd build cmake .. -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF -DASSIMP_BUILD_TESTS=OFF cmake --build . --config Release ``` 编译产物:`build/lib/Release/assimp-vc145-mt.lib` > **注意**:Assimp 依赖 zlib。如果链接时报 `uncompress` / `inflate` 等符号未定义, > 需要下载 zlib 预编译包:http://www.winimage.com/zLibDll/zlib123dllx64.zip > 解压到 `3rd/zlib/`,CMakeLists.txt 会自动链接 `static_x64/zlibstat.lib`。 #### 3. 构建 phase1 ```powershell cd phase1 mkdir build cd build cmake .. cmake --build . --config Release ``` ### 生成 GLAD 1. 访问 https://glad.dav1d.de/ 2. Language: **C/C++** 3. Specification: **OpenGL** 4. API → gl: **Version 4.6** 5. Profile: **Core** 6. 点击 Generate,下载 zip 7. 将 `glad.c` 和 `glad.h` 以及 `KHR/khrplatform.h` 放入 `phase1/include/glad/` 目录 ## 学习建议 1. **按顺序学习**:每课都依赖前一课的知识 2. **先看文档再写代码**:`docs/` 中的 Markdown 文件包含详细的概念讲解 3. **动手填空**:`phase1/` 中的代码框架有 TODO 标记,需要自己实现关键部分 4. **遇到问题先看文档的"常见问题"部分**,再对照参考实现 5. **完成每课的练习**:练习是巩固知识的关键 ## 许可 本课程内容仅供学习使用。