… | |
… | |
44 | ); |
44 | ); |
45 | } |
45 | } |
46 | |
46 | |
47 | ///////////////////////////////////////////////////////////////////////////// |
47 | ///////////////////////////////////////////////////////////////////////////// |
48 | |
48 | |
49 | void gl_matrix::diagonal (GLfloat v) |
49 | void matrix::diagonal (GLfloat v) |
50 | { |
50 | { |
51 | for (int i = 4; i--; ) |
51 | for (int i = 4; i--; ) |
52 | for (int j = 4; j--; ) |
52 | for (int j = 4; j--; ) |
53 | data[i][j] = i == j ? v : 0.; |
53 | data[i][j] = i == j ? v : 0.; |
54 | } |
54 | } |
55 | |
55 | |
56 | const gl_matrix operator *(const gl_matrix &a, const gl_matrix &b) |
56 | const matrix operator *(const matrix &a, const matrix &b) |
57 | { |
57 | { |
58 | gl_matrix r; |
58 | matrix r; |
59 | |
59 | |
60 | // taken from mesa |
60 | // taken from mesa |
61 | for (int i = 0; i < 4; i++) |
61 | for (int i = 0; i < 4; i++) |
62 | { |
62 | { |
63 | const GLfloat ai0=a(i,0), ai1=a(i,1), ai2=a(i,2), ai3=a(i,3); |
63 | const GLfloat ai0=a(i,0), ai1=a(i,1), ai2=a(i,2), ai3=a(i,3); |
… | |
… | |
69 | } |
69 | } |
70 | |
70 | |
71 | return r; |
71 | return r; |
72 | } |
72 | } |
73 | |
73 | |
74 | const gl_matrix gl_matrix::rotation (GLfloat angle, const vec3 &axis) |
74 | const matrix matrix::rotation (GLfloat angle, const vec3 &axis) |
75 | { |
75 | { |
76 | GLfloat xx, yy, zz, xy, yz, zx, xs, ys, zs, one_c, s, c; |
76 | GLfloat xx, yy, zz, xy, yz, zx, xs, ys, zs, one_c, s, c; |
77 | |
77 | |
78 | s = (GLfloat) sinf (angle * DEG2RAD); |
78 | s = (GLfloat) sinf (angle * DEG2RAD); |
79 | c = (GLfloat) cosf (angle * DEG2RAD); |
79 | c = (GLfloat) cosf (angle * DEG2RAD); |
80 | |
80 | |
81 | const GLfloat mag = abs (axis); |
81 | const GLfloat mag = abs (axis); |
82 | |
82 | |
83 | if (mag <= 1.0e-4) |
83 | if (mag <= 1.0e-4) |
84 | return gl_matrix (1); |
84 | return matrix (1); |
85 | |
85 | |
86 | gl_matrix m; |
86 | matrix m; |
87 | const vec3 n = axis * (1. / mag); |
87 | const vec3 n = axis * (1. / mag); |
88 | |
88 | |
89 | /* |
89 | /* |
90 | * Arbitrary axis rotation matrix. |
90 | * Arbitrary axis rotation matrix. |
91 | * |
91 | * |
… | |
… | |
171 | m(3,3) = 1; |
171 | m(3,3) = 1; |
172 | |
172 | |
173 | return m; |
173 | return m; |
174 | } |
174 | } |
175 | |
175 | |
176 | const vec3 operator *(const gl_matrix &a, const vec3 &v) |
176 | const vec3 operator *(const matrix &a, const vec3 &v) |
177 | { |
177 | { |
178 | return vec3 ( |
178 | return vec3 ( |
179 | a(0,0) * v.x + a(0,1) * v.y + a(0,2) * v.z + a(0,3), |
179 | a(0,0) * v.x + a(0,1) * v.y + a(0,2) * v.z + a(0,3), |
180 | a(1,0) * v.x + a(1,1) * v.y + a(1,2) * v.z + a(1,3), |
180 | a(1,0) * v.x + a(1,1) * v.y + a(1,2) * v.z + a(1,3), |
181 | a(2,0) * v.x + a(2,1) * v.y + a(2,2) * v.z + a(2,3) |
181 | a(2,0) * v.x + a(2,1) * v.y + a(2,2) * v.z + a(2,3) |
182 | ); |
182 | ); |
183 | } |
183 | } |
184 | |
184 | |
185 | void gl_matrix::print () |
185 | void matrix::print () |
186 | { |
186 | { |
187 | printf ("\n"); |
187 | printf ("\n"); |
188 | printf ("[ %f, %f, %f, %f ]\n", data[0][0], data[1][0], data[2][0], data[3][0]); |
188 | printf ("[ %f, %f, %f, %f ]\n", data[0][0], data[1][0], data[2][0], data[3][0]); |
189 | printf ("[ %f, %f, %f, %f ]\n", data[0][1], data[1][1], data[2][1], data[3][1]); |
189 | printf ("[ %f, %f, %f, %f ]\n", data[0][1], data[1][1], data[2][1], data[3][1]); |
190 | printf ("[ %f, %f, %f, %f ]\n", data[0][2], data[1][2], data[2][2], data[3][2]); |
190 | printf ("[ %f, %f, %f, %f ]\n", data[0][2], data[1][2], data[2][2], data[3][2]); |
191 | printf ("[ %f, %f, %f, %f ]\n", data[0][3], data[1][3], data[2][3], data[3][3]); |
191 | printf ("[ %f, %f, %f, %f ]\n", data[0][3], data[1][3], data[2][3], data[3][3]); |
192 | } |
192 | } |
193 | |
193 | |
194 | const gl_matrix gl_matrix::translation (const vec3 &v) |
194 | const matrix matrix::translation (const vec3 &v) |
195 | { |
195 | { |
196 | gl_matrix m(1); |
196 | matrix m(1); |
197 | |
197 | |
198 | m(0,3) = v.x; |
198 | m(0,3) = v.x; |
199 | m(1,3) = v.y; |
199 | m(1,3) = v.y; |
200 | m(2,3) = v.z; |
200 | m(2,3) = v.z; |
201 | |
201 | |