From 42e03ddc3b28c41b81fb5410feb72750530ffa13 Mon Sep 17 00:00:00 2001 From: Frederico Linhares Date: Mon, 22 Aug 2022 17:26:43 -0300 Subject: feat Make camera and model instance more abstract * src/camera.cpp src/camera.hpp: Remove the camera as Vector3D and Rotation3D are going to replace it. * src/model.cpp: Add draw command as instances do not exist anymore. * src/model/instance.cpp src/model/instance.hpp: Remove the instance as Vector3D and Rotation3D are going to replace it. --- src/vk/graphics_pipeline.cpp | 30 ++++++++++++++---------------- 1 file changed, 14 insertions(+), 16 deletions(-) (limited to 'src/vk/graphics_pipeline.cpp') diff --git a/src/vk/graphics_pipeline.cpp b/src/vk/graphics_pipeline.cpp index de08945..3956a99 100644 --- a/src/vk/graphics_pipeline.cpp +++ b/src/vk/graphics_pipeline.cpp @@ -845,7 +845,8 @@ namespace VK GraphicsPipeline::GraphicsPipeline(): current_frame{0}, - camera{std::make_shared()}, + camera_position{std::make_shared(0.0f, 0.0f, 0.0f)}, + camera_rotation{std::make_shared(0.0f, 0.0f, 0.0f)}, models_to_draw{cg_core.vk_swapchain->images_count} { loader.execute(this); @@ -952,17 +953,14 @@ GraphicsPipeline::draw() { // Object matrix. glm::mat4 instance_matrix{1.0f}; + instance_matrix = glm::translate( + instance_matrix, instances[i].position); instance_matrix = glm::rotate( - instance_matrix, glm::radians(instances[i].rotation.x), - glm::vec3{1.0, 0.0, 0.0}); + instance_matrix, instances[i].rotation.x, glm::vec3{1.0, 0.0, 0.0}); instance_matrix = glm::rotate( - instance_matrix, glm::radians(instances[i].rotation.y), - glm::vec3{0.0, 1.0, 0.0}); + instance_matrix, instances[i].rotation.y, glm::vec3{0.0, 1.0, 0.0}); instance_matrix = glm::rotate( - instance_matrix, glm::radians(instances[i].rotation.z), - glm::vec3{0.0, 0.0, 1.0}); - instance_matrix = glm::translate( - instance_matrix, instances[i].position); + instance_matrix, instances[i].rotation.z, glm::vec3{0.0, 0.0, 1.0}); ubo_model_instance.model[i] = instance_matrix; } @@ -982,16 +980,16 @@ GraphicsPipeline::draw() // View matrix. ubo_view_projection.view = glm::mat4{1.0f}; ubo_view_projection.view = glm::translate( - ubo_view_projection.view, this->camera->position); + ubo_view_projection.view, *this->camera_position); ubo_view_projection.view = glm::rotate( - ubo_view_projection.view, this->camera->rotation.x, - glm::vec3{1.0, 0.0, 0.0}); + ubo_view_projection.view, this->camera_rotation->y, + glm::vec3{0.0, 1.0, 0.0}); ubo_view_projection.view = glm::rotate( - ubo_view_projection.view, this->camera->rotation.y, - glm::vec3{0.0, 1.0, 0.0}); + ubo_view_projection.view, this->camera_rotation->x, + glm::vec3{1.0, 0.0, 0.0}); ubo_view_projection.view = glm::rotate( - ubo_view_projection.view, this->camera->rotation.z, - glm::vec3{0.0, 0.0, 1.0}); + ubo_view_projection.view, this->camera_rotation->z, + glm::vec3{0.0, 0.0, 1.0}); ubo_view_projection.view = glm::inverse(ubo_view_projection.view); // Projection matrix. -- cgit v1.2.3