feat: initial DX12 foundation framework
This commit is contained in:
83
Engine/Components/Transform.h
Normal file
83
Engine/Components/Transform.h
Normal file
@@ -0,0 +1,83 @@
|
||||
/**
|
||||
* @file Transform.h
|
||||
* @brief 变换组件数据结构与更新接口。
|
||||
*/
|
||||
#pragma once
|
||||
#include "ComponentsCommon.h"
|
||||
|
||||
namespace XEngine::transform {
|
||||
|
||||
/**
|
||||
* @brief 变换组件初始化参数。
|
||||
*/
|
||||
struct init_info
|
||||
{
|
||||
f32 position[3]{};
|
||||
f32 rotation[4]{};
|
||||
f32 scale[3]{1.f, 1.f, 1.f};
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief 变换组件缓存更新标记位。
|
||||
*/
|
||||
struct component_flags
|
||||
{
|
||||
enum flags :u32 {
|
||||
rotation = 0x01,
|
||||
orientation = 0x02,
|
||||
position = 0x04,
|
||||
scale = 0x08,
|
||||
|
||||
|
||||
all = rotation | orientation | position| scale
|
||||
};
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief 变换组件批量更新缓存项。
|
||||
*/
|
||||
struct component_cache
|
||||
{
|
||||
math::v4 rotation;
|
||||
math::v3 orientation;
|
||||
math::v3 position;
|
||||
math::v3 scale;
|
||||
|
||||
transform_id id;
|
||||
u32 flags;
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief 获取实体的世界矩阵与逆世界矩阵。
|
||||
* @param id 实体标识符。
|
||||
* @param world 输出世界矩阵。
|
||||
* @param inverse_world 输出逆世界矩阵。
|
||||
*/
|
||||
void get_transform_matrices(const game_entity::entity_id id, math::m4x4& world, math::m4x4& inverse_world);
|
||||
/**
|
||||
* @brief 为实体创建变换组件。
|
||||
* @param info 变换初始化参数。
|
||||
* @param entity 目标实体。
|
||||
* @return 创建后的变换组件句柄。
|
||||
*/
|
||||
component create( init_info info, game_entity::entity entity);
|
||||
/**
|
||||
* @brief 移除变换组件。
|
||||
* @param c 变换组件句柄。
|
||||
*/
|
||||
void remove(component c);
|
||||
/**
|
||||
* @brief 查询指定实体集合的变换更新标记。
|
||||
* @param ids 实体标识符数组。
|
||||
* @param count 实体数量。
|
||||
* @param flags 输出标记数组。
|
||||
*/
|
||||
void get_update_component_flags(const game_entity::entity_id *const ids, u32 count, u8 *const flags);
|
||||
/**
|
||||
* @brief 批量提交变换缓存更新。
|
||||
* @param cache 缓存数组首地址。
|
||||
* @param count 缓存项数量。
|
||||
*/
|
||||
void update(const component_cache *const cache, u32 count);
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user