106 lines
2.5 KiB
C++
106 lines
2.5 KiB
C++
#ifndef ARE_INCLUDE_SCENE_CAMERA_H
|
|
#define ARE_INCLUDE_SCENE_CAMERA_H
|
|
|
|
#include "basic/types.h"
|
|
|
|
namespace are {
|
|
|
|
/// @brief Camera projection type
|
|
enum class ProjectionType {
|
|
PERSPECTIVE,
|
|
ORTHOGRAPHIC
|
|
};
|
|
|
|
/// @brief Camera for rendering
|
|
class Camera {
|
|
public:
|
|
/// @brief Constructor
|
|
Camera();
|
|
|
|
/// @brief Destructor
|
|
~Camera();
|
|
|
|
/// @brief Set perspective projection
|
|
/// @param fov Field of view in degrees
|
|
/// @param aspect Aspect ratio
|
|
/// @param near Near plane
|
|
/// @param far Far plane
|
|
void set_perspective(float fov, float aspect, float near, float far);
|
|
|
|
/// @brief Set orthographic projection
|
|
/// @param left Left plane
|
|
/// @param right Right plane
|
|
/// @param bottom Bottom plane
|
|
/// @param top Top plane
|
|
/// @param near Near plane
|
|
/// @param far Far plane
|
|
void set_orthographic(float left, float right, float bottom, float top, float near, float far);
|
|
|
|
/// @brief Set camera position
|
|
/// @param position Position
|
|
void set_position(const Vec3& position);
|
|
|
|
/// @brief Set camera target
|
|
/// @param target Target position
|
|
void set_target(const Vec3& target);
|
|
|
|
/// @brief Set camera up vector
|
|
/// @param up Up vector
|
|
void set_up(const Vec3& up);
|
|
|
|
/// @brief Get view matrix
|
|
/// @return View matrix
|
|
Mat4 get_view_matrix() const;
|
|
|
|
/// @brief Get projection matrix
|
|
/// @return Projection matrix
|
|
Mat4 get_projection_matrix() const;
|
|
|
|
/// @brief Get view-projection matrix
|
|
/// @return View-projection matrix
|
|
Mat4 get_view_projection_matrix() const;
|
|
|
|
/// @brief Get camera position
|
|
/// @return Position
|
|
const Vec3& get_position() const { return position_; }
|
|
|
|
/// @brief Get camera forward direction
|
|
/// @return Forward direction
|
|
Vec3 get_forward() const;
|
|
|
|
/// @brief Get camera right direction
|
|
/// @return Right direction
|
|
Vec3 get_right() const;
|
|
|
|
/// @brief Get camera up direction
|
|
/// @return Up direction
|
|
Vec3 get_up() const;
|
|
|
|
private:
|
|
Vec3 position_;
|
|
Vec3 target_;
|
|
Vec3 up_;
|
|
|
|
ProjectionType projection_type_;
|
|
|
|
// Perspective parameters
|
|
float fov_;
|
|
float aspect_;
|
|
|
|
// Orthographic parameters
|
|
float left_, right_, bottom_, top_;
|
|
|
|
// Common parameters
|
|
float near_;
|
|
float far_;
|
|
|
|
mutable Mat4 view_matrix_;
|
|
mutable Mat4 projection_matrix_;
|
|
mutable bool view_dirty_;
|
|
mutable bool projection_dirty_;
|
|
};
|
|
|
|
} // namespace are
|
|
|
|
#endif // ARE_INCLUDE_SCENE_CAMERA_H
|