RioEngine  0.1
My first attempt to create a 3D WYSIWYG Game Engine
btcustom.cpp
Go to the documentation of this file.
1 #include "macro.h"
2 #include "btcustom.h"
3 
4 namespace btCustom {
5 
6 //-----------------------------------------------------------------------------
7 
8 btVector3 getAxisX(btMatrix3x3 &m) {
9  return btVector3(m[0][0], m[0][1], m[0][2]);
10 }
11 
12 //-----------------------------------------------------------------------------
13 
14 btVector3 getAxisY(btMatrix3x3 &m) {
15  return btVector3(m[1][0], m[1][1], m[1][2]);
16 }
17 
18 //-----------------------------------------------------------------------------
19 
20 btVector3 getAxisZ(btMatrix3x3 &m) {
21  return btVector3(m[2][0], m[2][1], m[2][2]);
22 }
23 
24 //-----------------------------------------------------------------------------
25 
26 btVector3 zero_vector() {
27  return btVector3(0,0,0);
28 }
29 
30 //-----------------------------------------------------------------------------
31 
32 btVector3 right() {
33  return btVector3(1.0f, 0, 0);
34 }
35 
36 //-----------------------------------------------------------------------------
37 
38 btVector3 right(const btQuaternion &q) {
39  btMatrix3x3 m = btMatrix3x3(q);
40  btVector3 axis_y = btVector3(m[0][1], m[1][1], m[2][1]);
41  btVector3 axis_z = btVector3(m[0][2], m[1][2], m[2][2]);
42  btVector3 right = axis_y.cross(axis_z);
43  right.normalize();
44  return right;
45 }
46 
47 //-----------------------------------------------------------------------------
48 
49 btVector3 up() {
50  return btVector3(0, 1.0f, 0);
51 }
52 
53 //-----------------------------------------------------------------------------
54 
55 btVector3 up(const btQuaternion &q) {
56  btMatrix3x3 m = btMatrix3x3(q);
57  btVector3 axis_x = btVector3(m[0][0], m[1][0], m[2][0]);
58  btVector3 axis_z = btVector3(m[0][2], m[1][2], m[2][2]);
59  btVector3 up = axis_x.cross(axis_z);
60  up.normalize();
61  return up;
62 }
63 
64 //-----------------------------------------------------------------------------
65 
66 btVector3 forward() {
67  return btVector3(0, 0, 1.0f);
68 }
69 
70 //-----------------------------------------------------------------------------
71 
72 btVector3 forward(const btQuaternion &q)
73 {
74  btMatrix3x3 m = btMatrix3x3(q);
75  btVector3 axis_x = btVector3(m[0][0], m[1][0], m[2][0]);
76  btVector3 axis_y = btVector3(m[0][1], m[1][1], m[2][1]);
77  btVector3 forward = axis_x.cross(axis_y);
78  forward.normalize();
79  return forward;
80 }
81 
82 //-----------------------------------------------------------------------------
83 
84 void print(const btVector3& vec) {
85  LOG("vec x: %.2f y: %.2f z: %.2f", vec.x(), vec.y(), vec.z());
86 }
87 
88 //-----------------------------------------------------------------------------
89 
90 void print(const btVector3* vec) {
91  LOG("vec x: %.2f y: %.2f z: %.2f", vec->x(), vec->y(), vec->z());
92 }
93 
94 //-----------------------------------------------------------------------------
95 
96 void print(const btQuaternion& quat) {
97  LOG("quat x: %.2f y: %.2f z: %.2f, w: %.2f", quat.x(), quat.y(), quat.z(), quat.w());
98 }
99 
100 //-----------------------------------------------------------------------------
101 
102 void print(const btMatrix3x3& matrix) {
103  float data[12];
104  matrix.getOpenGLSubMatrix(data);
105  LOG("---------------- Matrix begins");
106  LOG("%.2f %.2f %.2f %.2f", data[0], data[1], data[2], data[3]);
107  LOG("%.2f %.2f %.2f %.2f", data[4], data[5], data[6], data[7]);
108  LOG("%.2f %.2f %.2f %.2f", data[8], data[9], data[10], data[11]);
109  LOG("---------------- Matrix ends");
110 }
111 
112 //-----------------------------------------------------------------------------
113 
114 btVector3 getAxisX(const btQuaternion &q) {
115  return getAxisX(btMatrix3x3(q));
116 }
117 
118 //-----------------------------------------------------------------------------
119 
120 btVector3 getAxisY(const btQuaternion &q) {
121  return getAxisY(btMatrix3x3(q));
122 }
123 
124 //-----------------------------------------------------------------------------
125 
126 btVector3 getAxisZ(const btQuaternion &q) {
127  return getAxisZ(btMatrix3x3(q));
128 }
129 
130 //-----------------------------------------------------------------------------
131 
132 Matrix4 btQuaternionToMatrix4(const btQuaternion& q){
133  btMatrix3x3 matrix3 = btMatrix3x3(q);
134  btScalar elements_array[12];
135  matrix3.getOpenGLSubMatrix(elements_array);
136 
137  Matrix4 matrix4;
138  matrix4.set(
139  elements_array[0], // xx
140  elements_array[1], // xy
141  elements_array[2], // xz
142  0, // tx
143  elements_array[4], // yx
144  elements_array[5], // yy
145  elements_array[6], // yz
146  0, // ty
147  elements_array[8], // zx
148  elements_array[9], // zy
149  elements_array[10], // zz
150  0, // tz
151  0,0,0,1
152  );
153 
154  return matrix4;
155 }
156 }
#define LOG
Definition: macro.h:43
btVector3 zero_vector()
Definition: btcustom.cpp:26
void print(const btVector3 &vec)
Definition: btcustom.cpp:84
btVector3 up()
Definition: btcustom.cpp:49
btVector3 right()
Definition: btcustom.cpp:32
btVector3 getAxisZ(btMatrix3x3 &m)
Definition: btcustom.cpp:20
btVector3 getAxisY(btMatrix3x3 &m)
Definition: btcustom.cpp:14
Matrix4 btQuaternionToMatrix4(const btQuaternion &q)
Definition: btcustom.cpp:132
btVector3 forward()
Definition: btcustom.cpp:66
btVector3 getAxisX(btMatrix3x3 &m)
Definition: btcustom.cpp:8