feat: initial DX12 foundation framework

This commit is contained in:
SpecialX
2026-03-19 18:27:49 +08:00
commit 60f73b525d
70 changed files with 8993 additions and 0 deletions

128
Engine/EngineAPI/Camera.h Normal file
View File

@@ -0,0 +1,128 @@
/**
* @file Camera.h
* @brief 相机句柄与视图/投影参数接口定义。
* @details
* camera 提供对渲染相机实例的统一访问,覆盖:
* - 透视/正交两类投影参数设置;
* - 视图矩阵、投影矩阵及其逆矩阵查询;
* - 近远裁剪面、宽高与绑定实体 ID 读取。
*/
#pragma once
#include "CommonHeader.h"
namespace XEngine::graphics {
/**
* @brief 相机强类型标识符。
*/
DEFINE_TYPED_ID(camera_id);
/**
* @brief 渲染相机句柄对象。
*/
class camera
{
public:
/**
* @brief 投影模式枚举。
*/
enum type :u32
{
perspective,
orthographic,
};
constexpr explicit camera(camera_id id) : _id{ id } {}
constexpr camera() = default;
constexpr camera_id get_id() const { return _id; }
constexpr bool is_valid() const { return id::is_valid(_id); }
/**
* @brief 设置相机上方向。
*/
void up(math::v3 up) const;
/**
* @brief 设置透视投影视场角。
*/
void field_of_view(f32 fov) const;
/**
* @brief 设置视口宽高比。
*/
void aspect_ratio(f32 aspect_ratio) const;
/**
* @brief 设置正交视口宽度。
*/
void view_width(f32 width) const;
/**
* @brief 设置正交视口高度。
*/
void view_height(f32 height) const;
/**
* @brief 设置近远裁剪面。
*/
void range(f32 near_z, f32 far_z) const;
/**
* @brief 获取视图矩阵。
*/
math::m4x4 view() const;
/**
* @brief 获取投影矩阵。
*/
math::m4x4 projection() const;
/**
* @brief 获取投影矩阵逆矩阵。
*/
math::m4x4 inverse_projection() const;
/**
* @brief 获取视图投影矩阵。
*/
math::m4x4 view_projection() const;
/**
* @brief 获取视图投影逆矩阵。
*/
math::m4x4 inverse_view_projection() const;
/**
* @brief 获取上方向向量。
*/
math::v3 up() const;
/**
* @brief 获取近裁剪面。
*/
f32 near_z() const;
/**
* @brief 获取远裁剪面。
*/
f32 far_z() const;
/**
* @brief 获取视场角。
*/
f32 field_of_view() const;
/**
* @brief 获取宽高比。
*/
f32 aspect_ratio() const;
/**
* @brief 获取视口宽度。
*/
f32 view_width() const;
/**
* @brief 获取视口高度。
*/
f32 view_height() const;
/**
* @brief 获取投影类型。
*/
type projection_type() const;
/**
* @brief 获取绑定实体 ID。
*/
id::id_type entity_id() const;
private:
camera_id _id{ id::invalid_id };
};
}