Files
XCEngine/MVS/HelloEarth/README.md

115 lines
2.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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