Files
XCEngine/MVS/HelloEarth/README.md

115 lines
2.7 KiB
Markdown
Raw Normal View History

# 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
- 着色器HLSLShader Model 5.1