From 27c7a1739776e2de7a135e145220f42bd11b1a35 Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Thu, 15 Dec 2022 22:59:55 +0800 Subject: [PATCH] Fixed computation of global inverse inertia tensor --- SHADE_Engine/src/Physics/Collision/SHCollider.cpp | 7 +++++++ SHADE_Engine/src/Physics/Dynamics/SHRigidBody.cpp | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/SHADE_Engine/src/Physics/Collision/SHCollider.cpp b/SHADE_Engine/src/Physics/Collision/SHCollider.cpp index b64bab53..d7ca4b14 100644 --- a/SHADE_Engine/src/Physics/Collision/SHCollider.cpp +++ b/SHADE_Engine/src/Physics/Collision/SHCollider.cpp @@ -17,6 +17,7 @@ #include "Events/SHEvent.h" #include "Math/SHMathHelpers.h" #include "Physics/SHPhysicsEvents.h" +#include "Physics/Dynamics/SHRigidBody.h" namespace SHADE @@ -277,6 +278,9 @@ namespace SHADE SHEventManager::BroadcastEvent(EVENT_DATA, SH_PHYSICS_COLLIDER_ADDED_EVENT); + if (rigidBody) + rigidBody->ComputeMassData(); + return static_cast(shapes.size()); } @@ -316,6 +320,9 @@ namespace SHADE // Broadcast Event for removing a shape SHEventManager::BroadcastEvent(EVENT_DATA, SH_PHYSICS_COLLIDER_REMOVED_EVENT); + if (rigidBody) + rigidBody->ComputeMassData(); + SHLOG_INFO_D("Removing Collision Shape {} from Entity {}", index, entityID) } diff --git a/SHADE_Engine/src/Physics/Dynamics/SHRigidBody.cpp b/SHADE_Engine/src/Physics/Dynamics/SHRigidBody.cpp index c9f3b097..00df0640 100644 --- a/SHADE_Engine/src/Physics/Dynamics/SHRigidBody.cpp +++ b/SHADE_Engine/src/Physics/Dynamics/SHRigidBody.cpp @@ -598,7 +598,7 @@ namespace SHADE const SHMatrix ROTATION = SHMatrix::Rotate(motionState.orientation); // Compute world inertia - worldInvInertia = ROTATION * localInvInertia * SHMatrix::Transpose(ROTATION); + worldInvInertia = SHMatrix::Transpose(ROTATION) * localInvInertia * ROTATION; // Compute world centroid worldCentroid = (ROTATION * localCentroid) + motionState.position;