summaryrefslogtreecommitdiff
path: root/src/vk/graphics_pipeline_3d_skeletal.cpp
diff options
context:
space:
mode:
authorFrederico Linhares <fred@linhares.blue>2024-02-06 17:37:20 -0300
committerFrederico Linhares <fred@linhares.blue>2024-03-23 19:12:24 -0300
commitbf240d7eeaa89657462b705849fde56e54e237db (patch)
tree0bd3f9826dd2d4d88f9da1ec77ba8f1b27b41be1 /src/vk/graphics_pipeline_3d_skeletal.cpp
parent8d7e40e0b2b592efc7bcf7101ee362ec61f1989f (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.cpp31
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(