From 52d7270ba0a532a759a87ee29043c136811b8736 Mon Sep 17 00:00:00 2001 From: Jonathan Bradley Date: Tue, 24 Oct 2023 10:48:22 -0400 Subject: add MathHelpers for glm and bullet translations --- src/math-helpers.cpp | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ src/math-helpers.hpp | 15 +++++++++++++++ 2 files changed, 64 insertions(+) create mode 100644 src/math-helpers.cpp create mode 100644 src/math-helpers.hpp (limited to 'src') diff --git a/src/math-helpers.cpp b/src/math-helpers.cpp new file mode 100644 index 0000000..ebcd719 --- /dev/null +++ b/src/math-helpers.cpp @@ -0,0 +1,49 @@ +#include "math-helpers.hpp" + +// https://pybullet.org/Bullet/phpBB3/viewtopic.php?t=11462 + +void GlmToBullet(const glm::vec3 &vec, btVector3 &btVec) { + btVec.setX(vec.x); + btVec.setY(vec.y); + btVec.setZ(vec.z); +} + +void GlmToBullet(const glm::quat &quat, btQuaternion &btQuat) { + btQuat.setX(quat.x); + btQuat.setY(quat.y); + btQuat.setZ(quat.z); + btQuat.setW(quat.w); +} + +void BulletToGlm(const btVector3 &vec, glm::vec3 &glmVec) { + glmVec.x = vec.getX(); + glmVec.y = vec.getY(); + glmVec.z = vec.getZ(); +} + +void BulletToGlm(const btQuaternion &quat, glm::quat &glmQuat) { + glmQuat.x = quat.getX(); + glmQuat.y = quat.getY(); + glmQuat.z = quat.getZ(); + glmQuat.w = quat.getW(); +} + +void BulletToGlm(const btTransform &trans, glm::mat4 &glmMat4) { + const btMatrix3x3& basis = trans.getBasis(); + // rotation + for (int r = 0; r < 3; r++) { + for (int c = 0; c < 3; c++) { + glmMat4[c][r] = basis[r][c]; + } + } // translation + btVector3 origin = trans.getOrigin(); + glmMat4[3][0] = origin.getX(); + glmMat4[3][1] = origin.getY(); + glmMat4[3][2] = origin.getZ(); + // unit scale + glmMat4[0][3] = 0.0f; + glmMat4[1][3] = 0.0f; + glmMat4[2][3] = 0.0f; + glmMat4[3][3] = 1.0f; +} + diff --git a/src/math-helpers.hpp b/src/math-helpers.hpp new file mode 100644 index 0000000..9276df8 --- /dev/null +++ b/src/math-helpers.hpp @@ -0,0 +1,15 @@ +#ifndef PKE_MATH_HELPERS_HPP +#define PKE_MATH_HELPERS_HPP + +#include "vendor/glm_include.hpp" +#include +#include +#include + +void GlmToBullet(const glm::vec3 &vec, btVector3 &btVec); +void GlmToBullet(const glm::quat &quat, btQuaternion &btQuat); +void BulletToGlm(const btVector3 &vec, glm::vec3 &glmVec); +void BulletToGlm(const btQuaternion &quat, glm::quat &glmQuat); +void BulletToGlm(const btTransform &trans, glm::mat4 &glmMat4); + +#endif /* PKE_MATH_HELPERS_HPP */ -- cgit v1.2.3