115 lines
2.7 KiB
Markdown
115 lines
2.7 KiB
Markdown
# HelloEarth
|
||
|
||
基础 DirectX 12 渲染示例项目,展示如何搭建基本的渲染管线。
|
||
|
||
## 简介
|
||
|
||
HelloEarth 是 XCEngine 项目的入门级示例,通过渲染一个带纹理的球体,帮助理解 DirectX 12 的核心概念和渲染流程。
|
||
|
||
## 技术栈
|
||
|
||
- **渲染 API**: DirectX 12
|
||
- **语言**: C++17
|
||
- **构建系统**: CMake
|
||
- **依赖库**: DirectX 12 SDK, stb_image
|
||
|
||
## 项目结构
|
||
|
||
```
|
||
HelloEarth/
|
||
├── main.cpp # 程序入口
|
||
├── BattleFireDirect.cpp/h # DirectX 12 核心渲染实现
|
||
├── StaticMeshComponent.cpp/h # 静态网格组件
|
||
├── Utils.cpp/h # 工具函数
|
||
├── stbi/ # 图像加载库
|
||
│ ├── stb_image.h
|
||
│ └── stb_image.cpp
|
||
└── Res/ # 资源文件
|
||
├── Shader/
|
||
│ ├── gs.hlsl # 几何着色器
|
||
│ └── ndctriangle.hlsl # 三角形着色器
|
||
├── Model/
|
||
│ └── Sphere.lhsm # 球体模型
|
||
└── Image/
|
||
└── earth_d.jpg # 地球纹理
|
||
```
|
||
|
||
## 构建方法
|
||
|
||
### 前置要求
|
||
|
||
- Windows 10/11
|
||
- Visual Studio 2019 或更高版本
|
||
- CMake 3.15+
|
||
|
||
### 构建步骤
|
||
|
||
```bash
|
||
# 创建并进入构建目录
|
||
mkdir build && cd build
|
||
|
||
# 配置项目
|
||
cmake ..
|
||
|
||
# 编译
|
||
cmake --build . --config Release
|
||
```
|
||
|
||
### 运行
|
||
|
||
编译完成后运行 `HelloEarth.exe`(如果生成了可执行文件)
|
||
|
||
## 功能特性
|
||
|
||
### 渲染管线
|
||
- DirectX 12 渲染环境初始化
|
||
- 命令队列和命令列表管理
|
||
- 资源转换和同步
|
||
|
||
### 着色器
|
||
- 顶点着色器(VS)
|
||
- 几何着色器(GS)
|
||
- 像素着色器(PS)
|
||
|
||
### 资源管理
|
||
- 静态网格加载和渲染
|
||
- 纹理加载(支持 JPG/PNG)
|
||
- 常量缓冲区管理
|
||
- 着色器资源视图(SRV)
|
||
|
||
### 数学运算
|
||
- 投影矩阵(Perspective Projection)
|
||
- 视图矩阵(View Matrix)
|
||
- 模型矩阵(Model Matrix)
|
||
- 法线矩阵计算
|
||
|
||
## 核心概念
|
||
|
||
### 渲染流程
|
||
1. 初始化 D3D12 设备和命令队列
|
||
2. 创建命令分配器和命令列表
|
||
3. 加载着色器(编译 HLSL)
|
||
4. 创建根签名和 PSO 管道状态
|
||
5. 加载网格模型和纹理
|
||
6. 创建常量缓冲区并更新数据
|
||
7. 渲染循环:
|
||
- 重置命令分配器和列表
|
||
- 设置渲染目标
|
||
- 设置根签名和 PSO
|
||
- 设置描述符堆
|
||
- 绑定常量缓冲和纹理
|
||
- 提交绘制命令
|
||
- 呈现交换链
|
||
|
||
### 关键接口
|
||
- `InitD3D12` - 初始化 DirectX 12
|
||
- `CreateShaderFromFile` - 从文件加载着色器
|
||
- `CreatePSO` - 创建管道状态对象
|
||
- `StaticMeshComponent::Render` - 渲染网格
|
||
|
||
## 资源说明
|
||
|
||
- 模型文件格式:`.lhsm`(自定义格式)
|
||
- 纹理支持:PNG、JPG
|
||
- 着色器:HLSL(Shader Model 5.1)
|