#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