summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Bradley <jcb@pikum.xyz>2023-10-24 10:48:22 -0400
committerJonathan Bradley <jcb@pikum.xyz>2023-11-15 13:11:11 -0500
commit52d7270ba0a532a759a87ee29043c136811b8736 (patch)
treea9c95ca698d81ecb0ffbd9ae4c9336ed56a7ae0b
parenta4e6f3936b43f239a70fb534b23530b098d6b6f2 (diff)
add MathHelpers for glm and bullet translations
-rw-r--r--CMakeLists.txt2
-rw-r--r--src/math-helpers.cpp49
-rw-r--r--src/math-helpers.hpp15
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 */