diff options
author | Frederico Linhares <fred@linhares.blue> | 2024-02-06 17:37:20 -0300 |
---|---|---|
committer | Frederico Linhares <fred@linhares.blue> | 2024-03-23 19:12:24 -0300 |
commit | bf240d7eeaa89657462b705849fde56e54e237db (patch) | |
tree | 0bd3f9826dd2d4d88f9da1ec77ba8f1b27b41be1 /src/vk/graphics_pipeline_3d_skeletal.cpp | |
parent | 8d7e40e0b2b592efc7bcf7101ee362ec61f1989f (diff) |
refa Use quaternion for orientation
Diffstat (limited to 'src/vk/graphics_pipeline_3d_skeletal.cpp')
-rw-r--r-- | src/vk/graphics_pipeline_3d_skeletal.cpp | 31 |
1 files changed, 11 insertions, 20 deletions
diff --git a/src/vk/graphics_pipeline_3d_skeletal.cpp b/src/vk/graphics_pipeline_3d_skeletal.cpp index c4dabdf..364b502 100644 --- a/src/vk/graphics_pipeline_3d_skeletal.cpp +++ b/src/vk/graphics_pipeline_3d_skeletal.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2022-2023 Frederico de Oliveira Linhares + * Copyright 2022-2024 Frederico de Oliveira Linhares * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -305,14 +305,10 @@ GraphicsPipeline3DSkeletal::draw( for(auto &instance: instances) { // Object matrix. - glm::mat4 base_matrix{1.0f}; - base_matrix = glm::translate(base_matrix, *instance->position); - base_matrix = glm::rotate( - base_matrix, instance->rotation->x, glm::vec3{1.0, 0.0, 0.0}); - base_matrix = glm::rotate( - base_matrix, instance->rotation->y, glm::vec3{0.0, 1.0, 0.0}); - base_matrix = glm::rotate( - base_matrix, instance->rotation->z, glm::vec3{0.0, 0.0, 1.0}); + glm::mat4 translation_matrix{1.0f}; + translation_matrix = glm::translate( + translation_matrix, *instance->position); + glm::mat4 rotation_matrix{glm::toMat4(*instance->orientation)}; std::array<VkDescriptorSet, 4> vk_descriptor_sets{ cg_core.vk_light->descriptor_sets_world[image_index], @@ -330,7 +326,7 @@ GraphicsPipeline3DSkeletal::draw( VK::UDOSkeletalModel udo_skeletal_model{}; instance->tick(cg_core.delta_time); - udo_skeletal_model.base_matrix = base_matrix; + udo_skeletal_model.base_matrix = translation_matrix * rotation_matrix; std::copy(instance->bone_transforms.begin(), instance->bone_transforms.end(), udo_skeletal_model.bone_matrices); @@ -342,16 +338,11 @@ GraphicsPipeline3DSkeletal::draw( VK::UDOView3D ubo_view_3d{}; // View matrix. - ubo_view_3d.view = glm::mat4{1.0f}; - ubo_view_3d.view = glm::translate( - ubo_view_3d.view, *view->camera_position); - ubo_view_3d.view = glm::rotate( - ubo_view_3d.view, view->camera_rotation->y, glm::vec3{0.0, 1.0, 0.0}); - ubo_view_3d.view = glm::rotate( - ubo_view_3d.view, view->camera_rotation->x, glm::vec3{1.0, 0.0, 0.0}); - ubo_view_3d.view = glm::rotate( - ubo_view_3d.view, view->camera_rotation->z, glm::vec3{0.0, 0.0, 1.0}); - ubo_view_3d.view = glm::inverse(ubo_view_3d.view); + glm::mat4 translation_matrix{1.0f}; + translation_matrix = glm::translate( + translation_matrix, *view->camera_position); + glm::mat4 rotation_matrix{glm::toMat4(*view->camera_orientation)}; + ubo_view_3d.view = glm::inverse(translation_matrix * rotation_matrix); // Projection matrix. ubo_view_3d.proj = glm::perspective( |