129 lines
2.4 KiB
C++
129 lines
2.4 KiB
C++
/**
|
|
* @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 };
|
|
};
|
|
|
|
|
|
}
|