diff options
author | Jose Antonio Marquez | 2012-03-09 13:36:41 -0800 |
---|---|---|
committer | Jose Antonio Marquez | 2012-03-09 13:36:41 -0800 |
commit | 9a03f869ff4520431da3ac8c64b748b5fbb60339 (patch) | |
tree | dad948f012cbc7d65e0dccde273667a389ff1c6d /js/lib/math/matrix.js | |
parent | b0b4a1ee6792d98f06cbd8ecf5291e66db8a4eef (diff) | |
parent | b4eb2f6cc1208fe5c18aa1f02a85adda25075d81 (diff) | |
download | ninja-9a03f869ff4520431da3ac8c64b748b5fbb60339.tar.gz |
Merge branch 'refs/heads/Ninja-Internal' into Color
Diffstat (limited to 'js/lib/math/matrix.js')
-rwxr-xr-x | js/lib/math/matrix.js | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/js/lib/math/matrix.js b/js/lib/math/matrix.js new file mode 100755 index 00000000..77a0966d --- /dev/null +++ b/js/lib/math/matrix.js | |||
@@ -0,0 +1,104 @@ | |||
1 | /* <copyright> | ||
2 | This file contains proprietary software owned by Motorola Mobility, Inc.<br/> | ||
3 | No rights, expressed or implied, whatsoever to this software are provided by Motorola Mobility, Inc. hereunder.<br/> | ||
4 | (c) Copyright 2011 Motorola Mobility, Inc. All Rights Reserved. | ||
5 | </copyright> */ | ||
6 | |||
7 | var Matrix = function Matrix() { | ||
8 | |||
9 | }; | ||
10 | |||
11 | Matrix.create = function( rowArray ) { | ||
12 | var mat = Matrix.I(4); | ||
13 | var index = 0; | ||
14 | for(var j=0; j<4; j++) { | ||
15 | for (var i=0; i<4; i++) { | ||
16 | mat[index] = rowArray[i][j]; | ||
17 | index++; | ||
18 | } | ||
19 | } | ||
20 | |||
21 | return mat; | ||
22 | }; | ||
23 | |||
24 | Matrix.I = function(dimen) { | ||
25 | var mat = []; | ||
26 | |||
27 | for (var i = 0; i<dimen*dimen; i++) { | ||
28 | mat.push(0); | ||
29 | } | ||
30 | |||
31 | var index = 0; | ||
32 | for (var j = 0; j<dimen; j++) { | ||
33 | mat[index] = 1.0; | ||
34 | index += dimen + 1; | ||
35 | } | ||
36 | |||
37 | return mat; | ||
38 | }; | ||
39 | |||
40 | Matrix.Translation = function (vec) { | ||
41 | var mat = Matrix.I(4); | ||
42 | glmat4.translate(mat, vec); | ||
43 | return mat; | ||
44 | }; | ||
45 | |||
46 | Matrix.RotationX = function( angle ) { | ||
47 | var mat = Matrix.I(4); | ||
48 | glmat4.rotateX(mat, angle); | ||
49 | return mat; | ||
50 | }; | ||
51 | |||
52 | Matrix.RotationY = function( angle ) { | ||
53 | var mat = Matrix.I(4); | ||
54 | glmat4.rotateY(mat, angle); | ||
55 | return mat; | ||
56 | }; | ||
57 | |||
58 | Matrix.RotationZ = function( angle ) { | ||
59 | var mat = Matrix.I(4); | ||
60 | glmat4.rotateZ(mat, angle); | ||
61 | return mat; | ||
62 | }; | ||
63 | |||
64 | Matrix.Rotation = function(angle, axis) { | ||
65 | var mat = Matrix.I(4); | ||
66 | glmat4.rotate(mat, angle, axis); | ||
67 | return mat; | ||
68 | }; | ||
69 | |||
70 | Matrix.flatten = function (mat) { | ||
71 | var result = []; | ||
72 | if (this.elements.length == 0) { | ||
73 | return []; | ||
74 | } | ||
75 | |||
76 | for (var i=0; i<16; i++) { | ||
77 | result.push(mat[i]); | ||
78 | } | ||
79 | |||
80 | return result; | ||
81 | }; | ||
82 | |||
83 | Matrix.makePerspective = function (fovy, aspect, znear, zfar) { | ||
84 | var ymax = znear * Math.tan(fovy * Math.PI / 360.0); | ||
85 | var ymin = -ymax; | ||
86 | var xmin = ymin * aspect; | ||
87 | var xmax = ymax * aspect; | ||
88 | |||
89 | //return makeFrustum(xmin, xmax, ymin, ymax, znear, zfar); | ||
90 | |||
91 | var X = 2*znear/(xmax-xmin); | ||
92 | var Y = 2*znear/(ymax-ymin); | ||
93 | var A = (xmax+xmin)/(xmax-xmin); | ||
94 | var B = (ymax+ymin)/(ymax-ymin); | ||
95 | var C = -(zfar+znear)/(zfar-znear); | ||
96 | var D = -2*zfar*znear/(zfar-znear); | ||
97 | |||
98 | return Matrix.create([[X, 0, A, 0], [0, Y, B, 0], [0, 0, C, D], [0, 0, -1, 0]]); | ||
99 | |||
100 | }; | ||
101 | |||
102 | // Namepace this class | ||
103 | // TODO | ||
104 | window.Matrix = Matrix; | ||