2.7 KiB
2.7 KiB
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+
构建步骤
# 创建并进入构建目录
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)
- 法线矩阵计算
核心概念
渲染流程
- 初始化 D3D12 设备和命令队列
- 创建命令分配器和命令列表
- 加载着色器(编译 HLSL)
- 创建根签名和 PSO 管道状态
- 加载网格模型和纹理
- 创建常量缓冲区并更新数据
- 渲染循环:
- 重置命令分配器和列表
- 设置渲染目标
- 设置根签名和 PSO
- 设置描述符堆
- 绑定常量缓冲和纹理
- 提交绘制命令
- 呈现交换链
关键接口
InitD3D12- 初始化 DirectX 12CreateShaderFromFile- 从文件加载着色器CreatePSO- 创建管道状态对象StaticMeshComponent::Render- 渲染网格
资源说明
- 模型文件格式:
.lhsm(自定义格式) - 纹理支持:PNG、JPG
- 着色器:HLSL(Shader Model 5.1)