#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); btVec.setW(0.f); } 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; } template T log_interp_T(T min_value, T max_value, T t) { T start = log10(min_value); T end = log10(max_value); T intrp = start + (t * (end - start)); return pow(T(10), intrp); } float log_interp(float min_value, float max_value, float t) { return log_interp_T(min_value, max_value, t); } double log_interp(double min_value, double max_value, double t) { return log_interp_T(min_value, max_value, t); }