diff options
| author | Jonathan Bradley <jcb@pikum.xyz> | 2023-10-24 10:48:22 -0400 |
|---|---|---|
| committer | Jonathan Bradley <jcb@pikum.xyz> | 2023-11-15 13:11:11 -0500 |
| commit | 52d7270ba0a532a759a87ee29043c136811b8736 (patch) | |
| tree | a9c95ca698d81ecb0ffbd9ae4c9336ed56a7ae0b | |
| parent | a4e6f3936b43f239a70fb534b23530b098d6b6f2 (diff) | |
add MathHelpers for glm and bullet translations
| -rw-r--r-- | CMakeLists.txt | 2 | ||||
| -rw-r--r-- | src/math-helpers.cpp | 49 | ||||
| -rw-r--r-- | src/math-helpers.hpp | 15 |
3 files changed, 66 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index c06b53d..22de8fc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -31,6 +31,8 @@ set(PKE_SOURCE_FILES src/game-type-defs.hpp src/helpers.hpp src/helpers.cpp + src/math-helpers.hpp + src/math-helpers.cpp src/memory.hpp src/memory.cpp src/memory-allocator.hpp 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 <LinearMath/btQuaternion.h> +#include <LinearMath/btVector3.h> +#include <LinearMath/btTransform.h> + +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 */ |
