#include <matrix.h>
Public Methods | |
Matrix4x4 () | |
Matrix4x4 (float m11, float m12, float m13, float m14, float m21, float m22, float m23, float m24, float m31, float m32, float m33, float m34, float m41, float m42, float m43, float m44) | |
Matrix4x4 (Matrix4x4 *matrix) | |
const VECTOR | operator * (const VECTOR &vec) const |
void | identity () |
void | transpose () |
void | rotation (VECTOR from, VECTOR to) |
void | rotateX (float alpha) |
void | rotateY (float alpha) |
void | rotateZ (float alpha) |
Private Attributes | |
float | mat [4][4] |
|
Definition at line 12 of file matrix.cpp. References mat.
00012 { 00013 00014 for(int i = 0; i < 4; i++) { 00015 for(int j=0;j < 4; j++) { 00016 mat[i][j] = 0.0; 00017 } 00018 } 00019 } |
|
Definition at line 27 of file matrix.cpp. References mat.
00030 { 00031 00032 mat[0][0] = m11; 00033 mat[0][1] = m21; 00034 mat[0][2] = m31; 00035 mat[0][3] = m41; 00036 mat[1][0] = m12; 00037 mat[1][1] = m22; 00038 mat[1][2] = m32; 00039 mat[1][3] = m42; 00040 mat[2][0] = m13; 00041 mat[2][1] = m23; 00042 mat[2][2] = m33; 00043 mat[2][3] = m43; 00044 mat[3][0] = m14; 00045 mat[3][1] = m24; 00046 mat[3][2] = m34; 00047 mat[3][3] = m44; 00048 00049 } |
|
Definition at line 21 of file matrix.cpp. References mat.
|
|
Definition at line 52 of file matrix.cpp. References mat.
|
|
Definition at line 63 of file matrix.cpp. References mat, VECTOR::x, VECTOR::y, and VECTOR::z.
00063 { 00064 VECTOR result; 00065 result.x = mat[0][0]*vec.x + mat[1][0]*vec.y + mat[2][0] * vec.z + mat[3][0]; 00066 result.y = mat[0][1]*vec.x + mat[1][1]*vec.y + mat[2][1] * vec.z + mat[3][1]; 00067 result.z = mat[0][2]*vec.x + mat[1][2]*vec.y + mat[2][2] * vec.z + mat[3][2]; 00068 return result; 00069 } |
|
Definition at line 173 of file matrix.cpp. References mat. Referenced by Perspective::RotateX(), and Raycaster::RotateX().
00173 { 00174 float cosa = cos(alpha); 00175 float sina = sin(alpha); 00176 00177 mat[0][0] = 1.0f; 00178 mat[0][1] = 0.0f; 00179 mat[0][2] = 0.0f; 00180 mat[0][3] = 0.0f; 00181 00182 mat[1][0] = 0.0f; 00183 mat[1][1] = cosa; 00184 mat[1][2] = sina; 00185 mat[1][3] = 0.0f; 00186 00187 mat[2][0] = 1.0f; 00188 mat[2][1] = -sina; 00189 mat[2][2] = cosa; 00190 mat[2][3] = 0.0f; 00191 00192 mat[3][0] = 0.0f; 00193 mat[3][1] = 0.0f; 00194 mat[3][2] = 0.0f; 00195 mat[3][3] = 1.0f; 00196 } |
|
Definition at line 199 of file matrix.cpp. References mat. Referenced by Perspective::RotateY(), and Raycaster::RotateY().
00199 { 00200 float cosa = cos(alpha); 00201 float sina = sin(alpha); 00202 00203 mat[0][0] = cosa; 00204 mat[0][1] = 0.0f; 00205 mat[0][2] = -sina; 00206 mat[0][3] = 0.0f; 00207 00208 mat[1][0] = 0.0f; 00209 mat[1][1] = 1.0f; 00210 mat[1][2] = 0.0f; 00211 mat[1][3] = 0.0f; 00212 00213 mat[2][0] = sina; 00214 mat[2][1] = 0.0f; 00215 mat[2][2] = cosa; 00216 mat[2][3] = 0.0f; 00217 00218 mat[3][0] = 0.0f; 00219 mat[3][1] = 0.0f; 00220 mat[3][2] = 0.0f; 00221 mat[3][3] = 1.0f; 00222 } |
|
Definition at line 225 of file matrix.cpp. References mat. Referenced by Perspective::RotateZ(), and Raycaster::RotateZ().
00225 { 00226 float cosa = cos(alpha); 00227 float sina = sin(alpha); 00228 00229 mat[0][0] = cosa; 00230 mat[0][1] = sina; 00231 mat[0][2] = 0.0f; 00232 mat[0][3] = 0.0f; 00233 00234 mat[1][0] = -sina; 00235 mat[1][1] = cosa; 00236 mat[1][2] = 0.0f; 00237 mat[1][3] = 0.0f; 00238 00239 mat[2][0] = 0.0f; 00240 mat[2][1] = 0.0f; 00241 mat[2][2] = 1.0f; 00242 mat[2][3] = 0.0f; 00243 00244 mat[3][0] = 0.0f; 00245 mat[3][1] = 0.0f; 00246 mat[3][2] = 0.0f; 00247 mat[3][3] = 1.0f; 00248 } |
|
Definition at line 90 of file matrix.cpp. References VECTOR::cross(), VECTOR::dot(), EPSILON, mat, VECTOR::x, VECTOR::y, and VECTOR::z. Referenced by Raycaster::SetViewingMatrix().
00090 { 00091 VECTOR v; 00092 float e, h, f; 00093 00094 v = from.cross(to); 00095 e = from.dot(to); 00096 f = (e < 0)? -e:e; 00097 if (f > 1.0 - EPSILON) { 00098 VECTOR x; 00099 00100 x.x = (from.x > 0.0) ? from.x : -from.x; 00101 x.y = (from.y > 0.0) ? from.y : -from.y; 00102 x.z = (from.z > 0.0) ? from.z : -from.z; 00103 00104 if(x.x < x.y) { 00105 if(x.x < x.z) { 00106 x.x = 1.0; 00107 x.y = x.z = 0.0; 00108 } else { 00109 x.z = 1.0; x.x = x.y = 0.0; 00110 } 00111 } 00112 else { 00113 if(x.y < x.z) { 00114 x.y = 1.0; x.x = x.z = 0.0; 00115 } else { 00116 x.z = 1.0; x.x = x.y = 0.0; 00117 } 00118 } 00119 00120 VECTOR u = x - from; 00121 VECTOR w = x - to; 00122 00123 float c1 = 2.0 / u.dot(u); 00124 float c2 = 2.0 / w.dot(w); 00125 float c3 = c1 * c2 * u.dot(w); 00126 00127 float u_h[3]; 00128 float w_h[3]; 00129 00130 u_h[0] = u.x; 00131 u_h[1] = u.y; 00132 u_h[2] = u.z; 00133 00134 w_h[0] = w.x; 00135 w_h[1] = w.y; 00136 w_h[2] = w.z; 00137 00138 00139 for(int i = 0; i < 3; i++) { 00140 for(int j = 0; j < 3; j++) { 00141 mat[i][j] = -c1 * u_h[i] * u_h[j] - c2 * w_h[i]*w_h[j] + c3 * w_h[i] * u_h[j]; 00142 } 00143 mat[i][i] += 1.0; 00144 } 00145 } 00146 else 00147 { 00148 h = (1.0 - e)/(v.dot(v)); 00149 00150 mat[0][0] = e + h*v.x * v.x; 00151 mat[0][1] = h*v.x*v.y - v.z; 00152 mat[0][2] = h*v.x*v.z + v.y; 00153 mat[0][3] = 0.0f; 00154 00155 mat[1][0] = h*v.x*v.y + v.z; 00156 mat[1][1] = e + h * v.y * v.y; 00157 mat[1][2] = h*v.y*v.z - v.x; 00158 mat[1][3] = 0.0f; 00159 00160 mat[2][0] = h*v.x*v.z - v.y; 00161 mat[2][1] = h*v.y*v.z + v.x; 00162 mat[2][2] = e + h*v.z * v.z; 00163 mat[2][3] = 0.0f; 00164 00165 mat[3][0] = 0.0f; 00166 mat[3][1] = 0.0f; 00167 mat[3][2] = 0.0f; 00168 mat[3][3] = 1.0f; 00169 } 00170 } |
|
Definition at line 72 of file matrix.cpp. References mat.
00072 { 00073 float tmp; 00074 for(int i = 0; i < 4; i++) { 00075 for(int j = 0; j < 4; j++) { 00076 tmp = mat[i][j]; 00077 mat[i][j] = mat[j][i]; 00078 mat[j][i] = tmp; 00079 } 00080 } 00081 } |
|
Definition at line 9 of file matrix.h. Referenced by identity(), Matrix4x4(), operator *(), rotateX(), rotateY(), rotateZ(), rotation(), and transpose(). |