RioEngine  0.1
My first attempt to create a 3D WYSIWYG Game Engine
matrixstack.cpp
Go to the documentation of this file.
1 //--------------------------------------------------------------- @License begins
2 // RioEngine: The late night Coke -without whores- debugging sessions
3 // 2012-2015 Leopoldo Lomas Flores. Torreon, Coahuila. MEXICO
4 // leopoldolomas [at] gmail
5 // www.rioengine.com
6 // www.leopoldolomas.info
7 // "You have a problem, you face it like a man."
8 //
9 // This is free and unencumbered software released into the public domain.
10 //
11 // Anyone is free to copy, modify, publish, use, compile, sell, or distribute this
12 // software, either in source code form or as a compiled binary, for any purpose,
13 // commercial or non-commercial, and by any means.
14 //
15 // In jurisdictions that recognize copyright laws, the author or authors of this
16 // software dedicate any and all copyright interest in the software to the public
17 // domain. We make this dedication for the benefit of the public at large and to
18 // the detriment of our heirs and successors. We intend this dedication to be
19 // an overt act of relinquishment in perpetuity of all present and future
20 // rights to this software under copyright law.
21 //
22 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
23 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,FITNESS
24 // FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE
25 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
26 // CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
27 // SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
28 //--------------------------------------------------------------- @License ends
29 
30 #include <math.h>
31 #include "constants.h"
32 #include "matrixstack.h"
33 
34 //-----------------------------------------------------------------------------
35 
36 namespace Math {
37 
39  m_stack = std::stack<Matrix4>();
40  identity();
41 }
42 
43 //-----------------------------------------------------------------------------
44 
45 void MatrixStack::setMatrix(Matrix4 matrix) {
46  m_currentMatrix = matrix;
47 }
48 
49 //-----------------------------------------------------------------------------
50 
52  return m_currentMatrix;
53 }
54 
55 //-----------------------------------------------------------------------------
56 
58  m_currentMatrix.identity();
59 }
60 
61 //-----------------------------------------------------------------------------
62 
64  if (m_stack.size() > k_MatrixStack_MaxSize) {
65  RE_ASSERT(false); // Stack Overflow
66  }
67 
68  m_stack.push(m_currentMatrix);
69  identity();
70 }
71 
72 //-----------------------------------------------------------------------------
73 
75  if (m_stack.size() == 0) {
76  RE_ASSERT(false); // Stack Underflow
77  }
78 
79  m_currentMatrix = m_stack.top();
80  m_stack.pop();
81 }
82 
83 //-----------------------------------------------------------------------------
84 
85 void MatrixStack::translate(btVector3 position) {
86  translate(position.x(), position.y(), position.z());
87 }
88 
89 //-----------------------------------------------------------------------------
90 
91 void MatrixStack::translate(float x, float y, float z) {
92  m_currentMatrix.translate(x, y, z);
93 }
94 
95 //-----------------------------------------------------------------------------
96 
97 void MatrixStack::scale(float x, float y, float z) {
98  m_currentMatrix.scale(x, y, z);
99 }
100 
101 //-----------------------------------------------------------------------------
102 
103 void MatrixStack::scale(btVector3 _scale) {
104  scale(_scale.x(), _scale.y(), _scale.z());
105 }
106 
107 //-----------------------------------------------------------------------------
108 
109 void MatrixStack::scale(float f) {
110  scale(btVector3(f, f, f));
111 }
112 
113 //-----------------------------------------------------------------------------
114 
115 void MatrixStack::rotate(btQuaternion rot) {
116  btVector3 *axis = &rot.getAxis();
117  Matrix4 rot_matrix;
118  rot_matrix.rotate(RADTODEG(rot.getAngle()), axis->x(), axis->y(), axis->z());
119  m_currentMatrix = m_currentMatrix * rot_matrix;
120 }
121 
122 //-----------------------------------------------------------------------------
123 
124 void MatrixStack::rotate(btVector3 vec) {
125  rotate(btQuaternion(vec.x(), vec.y(), vec.z()));
126 }
127 
128 //-----------------------------------------------------------------------------
129 
130 void MatrixStack::rotate(float x, float y, float z) {
131  btVector3 rot(y, x, z);
132  return rotate(rot);
133 }
134 
135 //-----------------------------------------------------------------------------
136 
137 const std::stack<Matrix4> MatrixStack::getStack() const {
138  return m_stack;
139 }
140 
141 }
Matrix4 & getMatrix()
Definition: matrixstack.cpp:51
void translate(btVector3 position)
Definition: matrixstack.cpp:85
void scale(float x, float y, float z)
Definition: matrixstack.cpp:97
void rotate(btQuaternion rot)
#define RE_ASSERT
Definition: macro.h:57
#define RADTODEG(x)
Definition: macro.h:53
void setMatrix(Matrix4)
Definition: matrixstack.cpp:45