From 13fb6be4307faba3eb58d43a803034e43cdf023d Mon Sep 17 00:00:00 2001 From: Antoine Pilote Date: Thu, 13 Jul 2023 17:26:14 -0400 Subject: [PATCH] Calculate Forward and Right vector fixed gizmo stutter --- Editor/resources/Models/Camera.gltf | 72 ++++++--------------- Editor/src/Windows/EditorInterface.cpp | 14 ++-- Nuake/src/Rendering/Camera.cpp | 1 + Nuake/src/Rendering/Camera.h | 3 +- Nuake/src/Scene/Systems/TransformSystem.cpp | 11 +++- 5 files changed, 38 insertions(+), 63 deletions(-) diff --git a/Editor/resources/Models/Camera.gltf b/Editor/resources/Models/Camera.gltf index 472b79b8..b8fbf7ed 100644 --- a/Editor/resources/Models/Camera.gltf +++ b/Editor/resources/Models/Camera.gltf @@ -8,8 +8,7 @@ { "name" : "Scene", "nodes" : [ - 0, - 1 + 0 ] } ], @@ -19,33 +18,14 @@ "name" : "Cube", "rotation" : [ 0, + -0.7071067690849304, 0, - 0.027799464762210846, - 0.9996135234832764 + 0.7071068286895752 ], "scale" : [ 0.21287661790847778, 0.14901362359523773, 0.14901362359523773 - ], - "translation" : [ - 0.007667064666748047, - 0, - 0 - ] - }, - { - "name" : "Camera", - "rotation" : [ - 0.483536034822464, - 0.33687159419059753, - -0.20870360732078552, - 0.7804827094078064 - ], - "translation" : [ - 7.358891487121582, - 4.958309173583984, - 6.925790786743164 ] } ], @@ -73,10 +53,9 @@ "attributes" : { "POSITION" : 0, "NORMAL" : 1, - "TANGENT" : 2, - "TEXCOORD_0" : 3 + "TEXCOORD_0" : 2 }, - "indices" : 4, + "indices" : 3, "material" : 0 } ] @@ -86,10 +65,10 @@ { "bufferView" : 0, "componentType" : 5126, - "count" : 170, + "count" : 204, "max" : [ 0.2293514609336853, - 0.20000004768371582, + 0.25309160351753235, 0.19999998807907104 ], "min" : [ @@ -102,59 +81,48 @@ { "bufferView" : 1, "componentType" : 5126, - "count" : 170, + "count" : 204, "type" : "VEC3" }, { "bufferView" : 2, "componentType" : 5126, - "count" : 170, - "type" : "VEC4" - }, - { - "bufferView" : 3, - "componentType" : 5126, - "count" : 170, + "count" : 204, "type" : "VEC2" }, { - "bufferView" : 4, + "bufferView" : 3, "componentType" : 5123, - "count" : 204, + "count" : 270, "type" : "SCALAR" } ], "bufferViews" : [ { "buffer" : 0, - "byteLength" : 2040, + "byteLength" : 2448, "byteOffset" : 0 }, { "buffer" : 0, - "byteLength" : 2040, - "byteOffset" : 2040 + "byteLength" : 2448, + "byteOffset" : 2448 }, { "buffer" : 0, - "byteLength" : 2720, - "byteOffset" : 4080 + "byteLength" : 1632, + "byteOffset" : 4896 }, { "buffer" : 0, - "byteLength" : 1360, - "byteOffset" : 6800 - }, - { - "buffer" : 0, - "byteLength" : 408, - "byteOffset" : 8160 + "byteLength" : 540, + "byteOffset" : 6528 } ], "buffers" : [ { - "byteLength" : 8568, - "uri" : "data:application/octet-stream;base64,gL4uvlzOvj1czr69gL4uvlzOvj1czr69gL4uvlzOvj1czr69gL4uvlzOvj1czr69gL4uvlzOvj1czr69gL4uvljOvr1czr69gL4uvljOvr1czr69gL4uvljOvr1czr69gL4uvljOvr1czr69gL4uvljOvr1czr69gL4uvljOvr1czr69gL4uvlzOvj1czr49gL4uvlzOvj1czr49gL4uvlzOvj1czr49gL4uvlzOvj1czr49gL4uvlzOvj1czr49gL4uvljOvr1czr49gL4uvljOvr1czr49gL4uvljOvr1czr49gL4uvljOvr1czr49gL4uvljOvr1czr49psW9vnSJNL50iTS+psW9vnSJNL50iTS+psW9vnSJNL50iTS+psW9vnSJNL50iTS+Jh65vkB4Or5AeDq+Jh65vkB4Or5AeDq+Jh65vkB4Or5AeDq+Jh65vkB4Or5AeDq+Jh65vkB4Or5AeDq+Jh65vkB4Or5AeDq+Jh65vkB4Or5AeDo+Jh65vkB4Or5AeDo+Jh65vkB4Or5AeDo+Jh65vkB4Or5AeDo+Jh65vkB4Or5AeDo+Jh65vkB4Or5AeDo+psW9vnSJNL50iTQ+psW9vnSJNL50iTQ+psW9vnSJNL50iTQ+psW9vnSJNL50iTQ+Jh65vkR4Oj5AeDo+Jh65vkR4Oj5AeDo+Jh65vkR4Oj5AeDo+Jh65vkR4Oj5AeDo+Jh65vkR4Oj5AeDo+psW9vnSJND50iTQ+psW9vnSJND50iTQ+psW9vnSJND50iTQ+psW9vnSJND50iTQ+psW9vnSJND50iTS+psW9vnSJND50iTS+psW9vnSJND50iTS+Jh65vkR4Oj5AeDq+Jh65vkR4Oj5AeDq+Jh65vkR4Oj5AeDq+Jh65vkR4Oj5AeDq+Jh65vkR4Oj5AeDq+Jh65vkR4Oj5AeDq+ALZhPrCnQz7MzEy+ALZhPrCnQz7MzEy+ALZhPrCnQz7MzEy+ALZhPrCnQz7MzEy+ALZhPtDMTD6wp0O+ALZhPtDMTD6wp0O+ALZhPtDMTD6wp0O+ALZhPtDMTD6wp0O+ALZhPtDMTD6wp0O+HNtqPrCnQz6wp0O+HNtqPrCnQz6wp0O+HNtqPrCnQz6wp0O+HNtqPrCnQz6wp0O+ALZhPszMTL6wp0O+ALZhPszMTL6wp0O+ALZhPszMTL6wp0O+ALZhPszMTL6wp0O+ALZhPqynQ77MzEy+ALZhPqynQ77MzEy+ALZhPqynQ77MzEy+ALZhPqynQ77MzEy+HNtqPqynQ76wp0O+HNtqPqynQ76wp0O+HNtqPqynQ76wp0O+HNtqPqynQ76wp0O+HNtqPqynQ76wp0O+HNtqPqynQ76wp0O+HNtqPrCnQz6wp0M+HNtqPrCnQz6wp0M+HNtqPrCnQz6wp0M+HNtqPrCnQz6wp0M+HNtqPrCnQz6wp0M+HNtqPrCnQz6wp0M+ALZhPtDMTD6wp0M+ALZhPtDMTD6wp0M+ALZhPtDMTD6wp0M+ALZhPtDMTD6wp0M+ALZhPrCnQz7MzEw+ALZhPrCnQz7MzEw+ALZhPrCnQz7MzEw+ALZhPrCnQz7MzEw+HNtqPqynQ76wp0M+HNtqPqynQ76wp0M+HNtqPqynQ76wp0M+HNtqPqynQ76wp0M+ALZhPqynQ77MzEw+ALZhPqynQ77MzEw+ALZhPqynQ77MzEw+ALZhPqynQ77MzEw+ALZhPszMTL6wp0M+ALZhPszMTL6wp0M+ALZhPszMTL6wp0M+ALZhPszMTL6wp0M+ALZhPszMTL6wp0M+gL4uvqynQ76wp0O+gL4uvqynQ76wp0O+gL4uvqynQ76wp0O+gL4uvqynQ76wp0O+gL4uvqynQ76wp0O+ZJklvqynQ77MzEy+ZJklvqynQ77MzEy+ZJklvqynQ77MzEy+ZJklvqynQ77MzEy+ZJklvszMTL6wp0O+ZJklvszMTL6wp0O+ZJklvszMTL6wp0O+ZJklvszMTL6wp0O+ZJklvszMTL6wp0O+ZJklvszMTL6wp0M+ZJklvszMTL6wp0M+ZJklvszMTL6wp0M+ZJklvszMTL6wp0M+ZJklvqynQ77MzEw+ZJklvqynQ77MzEw+ZJklvqynQ77MzEw+ZJklvqynQ77MzEw+gL4uvqynQ76wp0M+gL4uvqynQ76wp0M+gL4uvqynQ76wp0M+gL4uvqynQ76wp0M+gL4uvqynQ76wp0M+gL4uvqynQ76wp0M+ZJklvrCnQz7MzEw+ZJklvrCnQz7MzEw+ZJklvrCnQz7MzEw+ZJklvrCnQz7MzEw+ZJklvtDMTD6wp0M+ZJklvtDMTD6wp0M+ZJklvtDMTD6wp0M+ZJklvtDMTD6wp0M+ZJklvtDMTD6wp0M+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" + "byteLength" : 7068, + "uri" : "data:application/octet-stream;base64,gL4uvlzOvj1czr69gL4uvlzOvj1czr69gL4uvlzOvj1czr69gL4uvlzOvj1czr69gL4uvlzOvj1czr69gL4uvljOvr1czr69gL4uvljOvr1czr69gL4uvljOvr1czr69gL4uvljOvr1czr69gL4uvljOvr1czr69gL4uvljOvr1czr69gL4uvlzOvj1czr49gL4uvlzOvj1czr49gL4uvlzOvj1czr49gL4uvlzOvj1czr49gL4uvlzOvj1czr49gL4uvljOvr1czr49gL4uvljOvr1czr49gL4uvljOvr1czr49gL4uvljOvr1czr49gL4uvljOvr1czr49psW9vnSJNL50iTS+psW9vnSJNL50iTS+psW9vnSJNL50iTS+psW9vnSJNL50iTS+Jh65vkB4Or5AeDq+Jh65vkB4Or5AeDq+Jh65vkB4Or5AeDq+Jh65vkB4Or5AeDq+Jh65vkB4Or5AeDq+Jh65vkB4Or5AeDq+Jh65vkB4Or5AeDo+Jh65vkB4Or5AeDo+Jh65vkB4Or5AeDo+Jh65vkB4Or5AeDo+Jh65vkB4Or5AeDo+Jh65vkB4Or5AeDo+psW9vnSJNL50iTQ+psW9vnSJNL50iTQ+psW9vnSJNL50iTQ+psW9vnSJNL50iTQ+Jh65vkR4Oj5AeDo+Jh65vkR4Oj5AeDo+Jh65vkR4Oj5AeDo+Jh65vkR4Oj5AeDo+Jh65vkR4Oj5AeDo+psW9vnSJND50iTQ+psW9vnSJND50iTQ+psW9vnSJND50iTQ+psW9vnSJND50iTQ+psW9vnSJND50iTS+psW9vnSJND50iTS+psW9vnSJND50iTS+Jh65vkR4Oj5AeDq+Jh65vkR4Oj5AeDq+Jh65vkR4Oj5AeDq+Jh65vkR4Oj5AeDq+Jh65vkR4Oj5AeDq+Jh65vkR4Oj5AeDq+ALZhPrCnQz7MzEy+ALZhPrCnQz7MzEy+ALZhPrCnQz7MzEy+ALZhPrCnQz7MzEy+ALZhPtDMTD6wp0O+ALZhPtDMTD6wp0O+ALZhPtDMTD6wp0O+ALZhPtDMTD6wp0O+ALZhPtDMTD6wp0O+HNtqPrCnQz6wp0O+HNtqPrCnQz6wp0O+HNtqPrCnQz6wp0O+HNtqPrCnQz6wp0O+ALZhPszMTL6wp0O+ALZhPszMTL6wp0O+ALZhPszMTL6wp0O+ALZhPszMTL6wp0O+ALZhPqynQ77MzEy+ALZhPqynQ77MzEy+ALZhPqynQ77MzEy+ALZhPqynQ77MzEy+HNtqPqynQ76wp0O+HNtqPqynQ76wp0O+HNtqPqynQ76wp0O+HNtqPqynQ76wp0O+HNtqPqynQ76wp0O+HNtqPqynQ76wp0O+HNtqPrCnQz6wp0M+HNtqPrCnQz6wp0M+HNtqPrCnQz6wp0M+HNtqPrCnQz6wp0M+HNtqPrCnQz6wp0M+HNtqPrCnQz6wp0M+ALZhPtDMTD6wp0M+ALZhPtDMTD6wp0M+ALZhPtDMTD6wp0M+ALZhPtDMTD6wp0M+ALZhPrCnQz7MzEw+ALZhPrCnQz7MzEw+ALZhPrCnQz7MzEw+ALZhPrCnQz7MzEw+HNtqPqynQ76wp0M+HNtqPqynQ76wp0M+HNtqPqynQ76wp0M+HNtqPqynQ76wp0M+ALZhPqynQ77MzEw+ALZhPqynQ77MzEw+ALZhPqynQ77MzEw+ALZhPqynQ77MzEw+ALZhPszMTL6wp0M+ALZhPszMTL6wp0M+ALZhPszMTL6wp0M+ALZhPszMTL6wp0M+ALZhPszMTL6wp0M+gL4uvqynQ76wp0O+gL4uvqynQ76wp0O+gL4uvqynQ76wp0O+gL4uvqynQ76wp0O+gL4uvqynQ76wp0O+ZJklvqynQ77MzEy+ZJklvqynQ77MzEy+ZJklvqynQ77MzEy+ZJklvqynQ77MzEy+ZJklvszMTL6wp0O+ZJklvszMTL6wp0O+ZJklvszMTL6wp0O+ZJklvszMTL6wp0O+ZJklvszMTL6wp0O+ZJklvszMTL6wp0M+ZJklvszMTL6wp0M+ZJklvszMTL6wp0M+ZJklvszMTL6wp0M+ZJklvqynQ77MzEw+ZJklvqynQ77MzEw+ZJklvqynQ77MzEw+ZJklvqynQ77MzEw+gL4uvqynQ76wp0M+gL4uvqynQ76wp0M+gL4uvqynQ76wp0M+gL4uvqynQ76wp0M+gL4uvqynQ76wp0M+gL4uvqynQ76wp0M+ZJklvrCnQz7MzEw+ZJklvrCnQz7MzEw+ZJklvrCnQz7MzEw+ZJklvrCnQz7MzEw+ZJklvtDMTD6wp0M+ZJklvtDMTD6wp0M+ZJklvtDMTD6wp0M+ZJklvtDMTD6wp0M+ZJklvtDMTD6wp0M+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AAAAAAAAAAAAAIA/AAAAAM0ENT8ZBTU/Tc0TPxTNEz9NzRM/8AQ1PwAAAAD3BDU/Tc0TPxTNE79NzRM/8AQ1PwAAAAD3BDU/EAU1P9cENb8AAACA//9/PwAAAAAAAACAAAAAAM0ENb8ZBTU/AAAAAAAAAAAAAIA/Tc0TPxTNE79NzRM/8AQ1PwAAAAD3BDU/AAAAAAAAgL8AAACAAAAAAM0ENb8ZBTU/Tc0TPxTNE79NzRM/EAU1P9cENb8AAACAKQU1P70ENb8AAACAAACAvwAAAABp1dU0AACAvwAAAAAAAACAEAU1v9cENb8AAACA8AQ1vwAAAAD3BDW/Tc0TvxTNE79NzRO/8AQ1vwAAAAD3BDW/Tc0TvxTNE79NzRO/AAAAAM0ENb8ZBTW/AAAAAAAAAAAAAIC/KQU1v70ENb8AAACAEAU1v9cENb8AAACATc0TvxTNE79NzRO/AAAAAAAAgL8AAACAAAAAAM0ENb8ZBTW/KQU1v70ENb8AAACATc0TvxTNE79NzRM/AAAAAAAAgL8AAACAAAAAAM0ENb8ZBTU/8AQ1vwAAAAD3BDU/Tc0TvxTNE79NzRM/AAAAAM0ENb8ZBTU/AAAAAAAAAAAAAIA/AACAvwAAAAAAAACAAACAvwAAAAAAAACAKQU1v70ENb8AAACAEAU1v9cENb8AAACA8AQ1vwAAAAD3BDU/Tc0TvxTNE79NzRM/8AQ1vwAAAAD3BDU/Tc0TvxTNEz9NzRM/AAAAAAAAAAAAAIA/AAAAAM0ENT8ZBTU/KQU1v70ENT8AAACAEAU1v9cENT8AAACATc0TvxTNEz9NzRM/AAAAAM0ENT8ZBTU/AAAAAAAAgD8AAACAAACAvwAAAAAAAACAAACAvwAAAAAAAACAEAU1v9cENT8AAACA8AQ1vwAAAAD3BDU/Tc0TvxTNEz9NzRM/AACAvwAAAACMRFu0AACAvwAAAABp1dU0AACAvwAAAAAAAACAKQU1v70ENT8AAACAEAU1v9cENT8AAACA8AQ1vwAAAAD3BDW/Tc0TvxTNEz9NzRO/KQU1v70ENT8AAACATc0TvxTNEz9NzRO/AAAAAM0ENT8ZBTW/AAAAAAAAgD8AAACA8AQ1vwAAAAD3BDW/Tc0TvxTNEz9NzRO/AAAAAAAAAAAAAIC/AAAAAM0ENT8ZBTW/AACAPwAAAAAAAACA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" } ] } diff --git a/Editor/src/Windows/EditorInterface.cpp b/Editor/src/Windows/EditorInterface.cpp index 15b71032..b659c5e1 100644 --- a/Editor/src/Windows/EditorInterface.cpp +++ b/Editor/src/Windows/EditorInterface.cpp @@ -204,8 +204,9 @@ namespace Nuake { ParentComponent& parent = Selection.Entity.GetComponent(); if (parent.HasParent) { - Matrix4 inverseParent = glm::inverse(parent.Parent.GetComponent().GetGlobalTransform()); - localTransform = inverseParent * localTransform; + const auto& parentTransformComponent = parent.Parent.GetComponent(); + const Matrix4& parentTransform = parentTransformComponent.GetGlobalTransform(); + localTransform = glm::inverse(parentTransform) * localTransform; } // Decompose local transform @@ -217,20 +218,17 @@ namespace Nuake { glm::decompose(localTransform, scale, rotation, pos, skew, pesp); tc.Translation = pos; + + rotation.w *= -1.0f; tc.Rotation = rotation; tc.Scale = scale; tc.LocalTransform = localTransform; - tc.Dirty = true; + //tc.Dirty = true; const Matrix4& translationMatrix = glm::translate(Matrix4(1.0f), pos); const Matrix4& rotationMatrix = glm::mat4_cast(rotation); const Matrix4& scaleMatrix = glm::scale(Matrix4(1.0f), scale); const Matrix4& newLocalTransform = translationMatrix * rotationMatrix * scaleMatrix; - - //tc.SetLocalPosition(pos); - //tc.SetLocalRotation(-rotationQuaternion); - //tc.SetLocalScale(scale); - //tc.SetLocalTransform(localTransform); // Decompose global trasnform Vector3 gscale = Vector3(); diff --git a/Nuake/src/Rendering/Camera.cpp b/Nuake/src/Rendering/Camera.cpp index 5cc11146..11342a89 100644 --- a/Nuake/src/Rendering/Camera.cpp +++ b/Nuake/src/Rendering/Camera.cpp @@ -89,6 +89,7 @@ namespace Nuake void Camera::SetTransform(const Matrix4& transform) { m_View = transform; + } Matrix4 Camera::GetTransform() diff --git a/Nuake/src/Rendering/Camera.h b/Nuake/src/Rendering/Camera.h index e72a9a93..a2e20590 100644 --- a/Nuake/src/Rendering/Camera.h +++ b/Nuake/src/Rendering/Camera.h @@ -24,7 +24,6 @@ namespace Nuake Vector3 Rotation = { 0.0f, 0.0f, 0.0f }; Vector3 Scale = { 1.0f, 1.0f, 1.0f }; Vector3 Up = Vector3(0, 1, 0); - Vector3 Right = Vector3(1, 0, 0); Matrix4 m_Perspective; Matrix4 m_View; @@ -32,6 +31,8 @@ namespace Nuake float AspectRatio = 16.0f / 9.0f; Vector3 Direction = Vector3(0, 0, 1); + Vector3 Right = Vector3(1, 0, 0); + Vector3 Translation = { 0.0f, 0.0f, 0.0f }; float Fov = 88.0f; float Exposure = 1.0f; diff --git a/Nuake/src/Scene/Systems/TransformSystem.cpp b/Nuake/src/Scene/Systems/TransformSystem.cpp index 334207cf..ea80f716 100644 --- a/Nuake/src/Scene/Systems/TransformSystem.cpp +++ b/Nuake/src/Scene/Systems/TransformSystem.cpp @@ -48,7 +48,7 @@ namespace Nuake auto& localScale = transform.GetLocalScale(); const Matrix4& translationMatrix = glm::translate(Matrix4(1.0f), localTranslate); - localRot.w *= -1.0f; + //localRot.w *= -1.0f; const Matrix4& rotationMatrix = glm::mat4_cast(localRot); const Matrix4& scaleMatrix = glm::scale(Matrix4(1.0f), localScale); const Matrix4& newLocalTransform = translationMatrix * rotationMatrix * scaleMatrix; @@ -116,7 +116,14 @@ namespace Nuake auto globalRotation = transform.GetGlobalRotation(); auto& trnaslationMatrix = glm::translate(Matrix4(1.0f), transform.GetGlobalPosition()); const Matrix4& rotationMatrix = glm::mat4_cast(globalRotation); - camera.CameraInstance->SetTransform(glm::inverse(trnaslationMatrix * rotationMatrix)); + Vector4 forward = Vector4(0, 0, -1, 1); + const auto globalForward = rotationMatrix * forward; + + Vector4 right = Vector4(1, 0, 0, 1); + const auto globalRight = rotationMatrix * right; + camera.CameraInstance->Direction = globalForward; + camera.CameraInstance->Right = globalRight; +; camera.CameraInstance->SetTransform(glm::inverse(trnaslationMatrix * rotationMatrix)); } } }