Files
XCEngine/MVS/HelloEarth
ssdfasd 5f12393424 feat: 实现D3D12 RHI抽象层,修复PSO创建问题
- 添加RHI接口定义(IRHIDevice, ICommandList, IResource等)
- 实现D3D12Device, D3D12CommandList, D3D12PipelineState等
- 修复RootSignature参数数量(3->4)与HelloEarth一致
- 修复DSV格式设置(Unknown->D24_UNorm_S8_UInt)
- 添加Geometry Shader编译
- 创建XCEngineDemo项目验证RHI功能
2026-03-14 02:42:59 +08:00
..

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
  • 法线矩阵计算

核心概念

渲染流程

  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