1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
|
#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<typename T>
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<float>(min_value, max_value, t);
}
double log_interp(double min_value, double max_value, double t) {
return log_interp_T<double>(min_value, max_value, t);
}
|