# DX12-Quick-Tutorial
**Repository Path**: zzw46589/DX12-Quick-Tutorial
## Basic Information
- **Project Name**: DX12-Quick-Tutorial
- **Description**: dgaf 的 《DirectX 12 快速教程》配套代码 (A Sample of dgaf's DirectX 12 Quick Beginner Tutorial),Gitee 镜像站
- **Primary Language**: C++
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 4
- **Forks**: 0
- **Created**: 2025-05-10
- **Last Updated**: 2026-02-20
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
DX12 快速教程
==================
- [前言](#前言)
- [配置方法 (教程资源获取方法)](#配置方法-教程资源获取方法)
- [教程目录](#教程目录)
- [基础篇](#1-InitWindow)
- [(1) InitWindow](#1-InitWindow)
- [(2) DrawSkyblueWindow](#2-DrawSkyblueWindow)
- [(3) DrawRectangle](#3-DrawRectangle)
- [(4) DrawTexture](#4-DrawTexture)
- [(5) DrawBlock](#5-DrawBlock)
- [(6) FirstPersonView](#6-FirstPersonView)
- [(7) RenderMatchbox](#7-RenderMatchbox)
- [(8) AlphaBlend](#8-AlphaBlend)
- [Assimp 篇](#9-AssimpAcquaintance)
- [(9) AssimpAcquaintance](#9-AssimpAcquaintance)
- [(10) RenderGLTFModel](#10-RenderGLTFModel)
- [(11) RenderGLTFSkinnedModel](#11-RenderGLTFSkinnedModel)
- [(12) RenderGLTFLightingModel](#12-RenderGLTFLightingModel)
- [(13) RenderGLTFAnimation](#13-RenderGLTFAnimation)
- [(14) RenderGLTFWithSkyBox](#14-RenderGLTFWithSkyBox)
- [进阶篇](#15-DrawInstanced)
- [(15) DrawInstanced](#15-DrawInstanced)
## 读者应该 clone 哪一个分支

**master** 分支是已经开发完成的项目,这些会加入到标准教程中,建议读者使用这个分支的源码;
**dev** 分支是实验性项目,这些项目有可能会被丢弃,也有可能被合并到 master 中,不建议读者使用;
如果有开发者想要与我联系,加入到 dev 分支开发协作的,可以联系我 QQ:3976357120
(备用 QQ:1281866925,备用邮箱:3976357120@qq.com)
## 2026.2.20 小更新
1. 第 15 章文字教程更新:**DX12 快速教程(15) —— 多实例渲染**
2. 修正部分代码以及文字描述
## 前言
DirectX 12 从 2015 年发布起,经过了长时间的变革与发展,获得了图形界一致的认可,被应用到现代游戏中。众多技术大神 (例如 Frank D. Luna, GameBabyRockSun, Yigarlor, 辰月二十七, 指掀涛澜天下惊, Dylan 等等) 对 DX12 API 进行了全面的深度解读,示例代码完全匹配他们高超的能力。然而无论是微软官方示例的 DirectX-Sample, 还是这些技术大神的示例代码,都对初学者 (尤其是初次接触底层 API 的初学者) 造成了不少的困扰。

DirectX 12 API 全面变革的静态 PSO,资源绑定,异步渲染架构,使它无异于图形学的 C++,学习难度与成本直线升高,很多初学者望而止步。为了降低初学者学习 DirectX 12 的难度,让初学者保持学习的乐趣与激情,本教程将一步步引导初学者理解 DX12,循序渐进,仅使用 DX12 API + C++ 标准库 + 必要的第三方库 (会内置在项目中,开盒即用),将 全注释代码 + 生动的图文教程 + 接近新一代的风格 有机结合,尽可能降低学习难度与代码复杂度,使初学者体验到图形学的乐趣,感受底层渲染逻辑的规律,为后面的工业化/企业级图形引擎/工具做良好铺垫。

## 配置方法 (教程资源获取方法)

方法(1): 使用 git 工具 clone 仓库
方法(2): 直接点击 "Download Zip" 下载压缩包,**解压缩后**,会得到一个文件夹,打开文件夹里的 .sln 即可
如果 Github 下载很慢,这里有国内 Gitee 镜像仓库地址:[https://gitee.com/zzw46589/DX12-Quick-Tutorial](https://gitee.com/zzw46589/DX12-Quick-Tutorial)
## 教程目录
### (1) InitWindow

初步认识 Win32 API,学会做一个 Win32 窗口,认识窗口创建与消息循环,为下一节正式学习 DX12 做铺垫。
[教程地址:DX12 快速教程(1) —— 做窗口](https://blog.csdn.net/DGAF2198588973/article/details/144488018)
### (2) DrawSkyblueWindow

正式开始学习 DirectX 12 API,用 DirectX 12 渲染一个天蓝色窗口,初步认识并创建 DX12 的基本设备、描述符堆、描述符与资源
[教程地址:DX12 快速教程(2) —— 渲染天蓝色窗口](https://blog.csdn.net/DGAF2198588973/article/details/144543014)
### (3) DrawRectangle

用 DirectX 12 画一个矩形,初步接触渲染管线、PSO 渲染管线状态与根签名,认识 shader 着色器的概念,了解相关的渲染原理
[教程地址:DX12 快速教程(3) —— 画矩形](https://blog.csdn.net/DGAF2198588973/article/details/144874380)
### (4) DrawTexture

用 DirectX 12 画一个钻石原矿,初步认识纹理,进一步学习根签名,认识 Root Descriptor Table 根描述表,接触 Shader Resource View 着色器资源描述符,体验 CPU 与 GPU 之间的交互与绑定过程
[教程地址:DX12 快速教程(4) —— 画钻石原矿](https://blog.csdn.net/DGAF2198588973/article/details/145232320)
### (5) DrawBlock

用 DirectX 12 画一个钻石原矿方块,理解 3D 渲染中场景与模型呈现到屏幕画面的基本原理,接触 MVP 矩阵,认识 Constant Resource View 常量资源描述符,认识 Root Descriptor 根描述符
[教程地址:DX12 快速教程(5) —— 画方块](https://blog.csdn.net/DGAF2198588973/article/details/145391595)
### (6) FirstPersonView

初步认识 Camera 摄像机,在 DirectX 12 上构建第一人称视角,理解摄像机平移、视角旋转对 MVP 的影响,理解 DX12 的资源绑定与传递
[教程地址:DX12 快速教程(6) —— 第一人称视角](https://blog.csdn.net/DGAF2198588973/article/details/146530258)
### (7) RenderMatchbox

渲染一个火柴盒,初步认识 Depth Stencil Buffer 深度模板缓冲,进一步认识顶点、模型与模型矩阵,体验多槽输入在 DirectX 12 中的使用,思考 C++ class 在实际游戏中的灵活运用
[教程地址:DX12 快速教程(7) —— 渲染火柴盒](https://blog.csdn.net/DGAF2198588973/article/details/147233643)
### (8) AlphaBlend

用 DirectX 12 绘制玻璃等有透明像素的物体,初步了解透明测试/混合与渲染顺序的关系,了解 shader 文件的编译过程,学会不同 PSO 渲染管线状态的创建细节与设置顺序
[教程地址:DX12 快速教程(8) —— 画玻璃](https://blog.csdn.net/DGAF2198588973/article/details/147780518)
### (9) AssimpAcquaintance




初步认识并使用 Assimp 库,学会 Assimp 在 VS 上的编译与配置,在控制台上获取并打印《蔚蓝档案》中的 霞沢美游 gltf 模型的数据 (模型骨骼节点信息,材质贴图信息,网格信息与 AABB 包围盒)
[教程地址:DX12 快速教程(9) —— 初识 Assimp 库](https://blog.csdn.net/DGAF2198588973/article/details/155643538)
### (10) RenderGLTFModel

使用 DirectX 12 + Assimp 渲染《合金装备崛起:复仇》中的 塞穆尔·罗德里格斯 gltf 模型 (该模型没有绑定骨骼),学会导入并使用模型文件、材质贴图、网格数据
[教程地址:DX12 快速教程(10) —— 渲染模型](https://blog.csdn.net/DGAF2198588973/article/details/155771199)
### (11) RenderGLTFSkinnedModel

使用 DirectX 12 + Assimp 渲染《约会大作战》中的 时崎狂三 gltf 骨骼模型,学会导入并使用骨骼模型,认识骨骼偏移矩阵与蒙皮网格,认识骨骼坐标系与网格坐标系,理解并使用骨骼权值与骨骼索引
[教程地址:DX12 快速教程(11) —— 渲染骨骼模型](https://blog.csdn.net/DGAF2198588973/article/details/155880215)
### (12) RenderGLTFLightingModel

加入光照,使用 DirectX 12 + Assimp 渲染《Ave Mujica》的 丰川祥子 gltf 骨骼模型,初步认识 Blinn-Phong 光照模型,了解 Assimp、DX12、光照模型 三者的交互,了解 Root Constants 根常量
[教程地址:DX12 快速教程(12) —— Blinn-Phong 光照模型](https://blog.csdn.net/DGAF2198588973/article/details/156517324)
### (13) RenderGLTFAnimation

加入骨骼动画,使用 DirectX 12 + Assimp 渲染《超次元游戏 海王星》中的 Neptune 涅普顿(绀紫之心) GLTF模型 的骨骼动画,了解骨骼动画的基本原理和流程,认识四元数及其应用,理解 Assimp 的数据存储方式
[教程地址:DX12 快速教程(13) —— 蒙皮骨骼动画](https://blog.csdn.net/DGAF2198588973/article/details/157096831)
### (14) RenderGLTFWithSkyBox

加入并渲染 HDR 天空盒,使用 DirectX 12 + Assimp + stb_image 渲染《为美好的生活献上祝福》中的 Q版阿库娅 GLTF 模型
[教程地址:DX12 快速教程(14) —— 屏幕空间天空盒](https://blog.csdn.net/DGAF2198588973/article/details/157870274)
### (15) DrawInstanced

进阶篇开门第一篇,学会 DirectX 12 的纹理数组、SRV Structured Buffer 结构化缓冲的创建与使用,GPU Instancing 硬件实例化,以及多实例渲染的应用,一次性快速渲染大量方块 (1125 个方块),第 7-8 章的那些方块类以及数据不用写了
[教程地址:DX12 快速教程(15) —— 多实例渲染](https://blog.csdn.net/DGAF2198588973/article/details/158066553)