Newer
Older
ForwardPlusRenderer / include / Camera.h
#include <stdafx.h>
#pragma once
#include "Buffer/DualBuffer.h"
#include <gtx/quaternion.hpp>
namespace vkbp
{
struct UBOPerFrame
{
  alignas(16) glm::mat4 projection_matrix;
  alignas(16) glm::mat4 view_matrix;
};

class Camera
{
  glm::vec3                            m_position;
  glm::quat                            m_rotation;
  float                                m_FOV;
  float                                m_near;
  float                                m_far;
  vkbp::DualUniformBuffer<UBOPerFrame> m_uniform_buffer;
  vk::UniqueDescriptorSet              m_descriptor_set;
public:
  Camera(
      glm::vec3 position = { 0.0f, 300.0f, 0.0f },
      glm::quat rotation = { 1.0f, 0.0f, 0.0f, 0.0f },
      float     FOV      = 60.0f,
      float     near     = 0.1f,
      float     far      = 10000.0f);

  void CreateUniformBuffers(const UBOPerFrame& ubo);
  void CreateDescriptorSet();
  void CreateDescriptorSetLayout();

  void Update();

  void SetPosition(glm::vec3 new_pos);
  void SetRotation(float amount, glm::vec3 axis_rot);

  void MoveX(float value);
  void MoveY(float value);
  void MoveZ(float value);

  void  RotateX(float value);
  void  RotateY(float value);
  void RotateZ(float value);

  [[nodiscard]] vk::DescriptorSet& GetDescriptorSet();
};
} // namespace vkbp