Advertisement
Delta

Matrix.js

Mar 23rd, 2011
310
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. window.Matrix = {};
  2.  
  3. Matrix.CreateScale = function(sX, sY, sZ)
  4. {
  5.     arguments.length == 1 && (sY = sZ = sX);
  6.    
  7.     return [
  8.         sX,  0,  0, 0,
  9.          0, sY,  0, 0,
  10.          0,  0, sZ, 0,
  11.          0,  0,  0, 1
  12.     ];
  13. };
  14.  
  15. Matrix.CreateTranslation = function(dX, dY, dZ)
  16. {
  17.     arguments.length == 1 && (dY = dZ = dX);
  18.    
  19.     return [
  20.          1,  0,  0, 0,
  21.          0,  1,  0, 0,
  22.          0,  0,  1, 0,
  23.         dX, dY, dZ, 1
  24.     ];
  25. };
  26.  
  27. Matrix.CreateRotationX = function(Ang)
  28. {
  29.     var Cos = Math.cos(Ang);
  30.     var Sin = Math.sin(Ang);
  31.    
  32.     return [
  33.         1,    0,   0, 0,
  34.         0,  Cos, Sin, 0,
  35.         0, -Sin, Cos, 0,
  36.         0,    0,   0, 1
  37.     ];
  38. };
  39.  
  40. Matrix.CreateRotationY = function(Ang)
  41. {
  42.     var Cos = Math.cos(Ang);
  43.     var Sin = Math.sin(Ang);
  44.    
  45.     return [
  46.         Cos, 0, -Sin, 0,
  47.           0, 1,    0, 0,
  48.         Sin, 0,  Cos, 0,
  49.           0, 0,    0, 1
  50.     ];
  51. };
  52.  
  53. Matrix.CreateRotationZ = function(Ang)
  54. {
  55.     var Cos = Math.cos(Ang);
  56.     var Sin = Math.sin(Ang);
  57.    
  58.     return [
  59.          Cos, Sin, 0, 0,
  60.         -Sin, Cos, 0, 0,
  61.            0,   0, 1, 0,
  62.            0,   0, 0, 1
  63.     ];
  64. };
  65.  
  66. Matrix.Mul = function(M2, M1)
  67. {
  68.     var M3 = [];
  69.    
  70.     M3[0] = M1[0] * M2[0] + M1[1] * M2[4] + M1[2] *  M2[8] + M1[3] * M2[12];
  71.     M3[1] = M1[0] * M2[1] + M1[1] * M2[5] + M1[2] *  M2[9] + M1[3] * M2[13];
  72.     M3[2] = M1[0] * M2[2] + M1[1] * M2[6] + M1[2] * M2[10] + M1[3] * M2[14];
  73.     M3[3] = M1[0] * M2[3] + M1[1] * M2[7] + M1[2] * M2[11] + M1[3] * M2[15];
  74.    
  75.     M3[4] = M1[4] * M2[0] + M1[5] * M2[4] + M1[6] *  M2[8] + M1[7] * M2[12];
  76.     M3[5] = M1[4] * M2[1] + M1[5] * M2[5] + M1[6] *  M2[9] + M1[7] * M2[13];
  77.     M3[6] = M1[4] * M2[2] + M1[5] * M2[6] + M1[6] * M2[10] + M1[7] * M2[14];
  78.     M3[7] = M1[4] * M2[3] + M1[5] * M2[7] + M1[6] * M2[11] + M1[7] * M2[15];
  79.    
  80.     M3[8]  = M1[8] * M2[0] + M1[9] * M2[4] + M1[10] *  M2[8] + M1[11] * M2[12];
  81.     M3[9]  = M1[8] * M2[1] + M1[9] * M2[5] + M1[10] *  M2[9] + M1[11] * M2[13];
  82.     M3[10] = M1[8] * M2[2] + M1[9] * M2[6] + M1[10] * M2[10] + M1[11] * M2[14];
  83.     M3[11] = M1[8] * M2[3] + M1[9] * M2[7] + M1[10] * M2[11] + M1[11] * M2[15];
  84.    
  85.     M3[12] = M1[12] * M2[0] + M1[13] * M2[4] + M1[14] *  M2[8] + M1[15] * M2[12];
  86.     M3[13] = M1[12] * M2[1] + M1[13] * M2[5] + M1[14] *  M2[9] + M1[15] * M2[13];
  87.     M3[14] = M1[12] * M2[2] + M1[13] * M2[6] + M1[14] * M2[10] + M1[15] * M2[14];
  88.     M3[15] = M1[12] * M2[3] + M1[13] * M2[7] + M1[14] * M2[11] + M1[15] * M2[15];
  89.    
  90.     return M3;
  91. };
  92.  
  93. Matrix.__defineGetter__("Identity", function()
  94. {
  95.     return [
  96.         1, 0, 0, 0,
  97.         0, 1, 0, 0,
  98.         0, 0, 1, 0,
  99.         0, 0, 0, 1
  100.     ];
  101. });
  102.  
  103. Matrix.Transpose = function(M)
  104. {
  105.     return [
  106.         M[0], M[4],  M[8], M[12],
  107.         M[1], M[5],  M[9], M[13],
  108.         M[2], M[6], M[10], M[14],
  109.         M[3], M[7], M[11], M[15]
  110.     ];
  111. }
  112.  
  113. Matrix.CreateLookAt = function(Position, Target, Up)
  114. {
  115.     if(Position.Equals(Target))
  116.         return Matrix.Identity;
  117.  
  118.     var zaxis = Position.Clone().Subtract(Target).Normalize();
  119.     var xaxis = Up.Clone().Cross(zaxis).Normalize();
  120.     var yaxis = zaxis.Clone().Cross(xaxis);
  121.    
  122.     var xdp = xaxis.Dot(Position);
  123.     var ydp = yaxis.Dot(Position);
  124.     var zdp = zaxis.Dot(Position);
  125.    
  126.     return [
  127.         xaxis.X, yaxis.X, zaxis.X, 0,
  128.         xaxis.Y, yaxis.Y, zaxis.Y, 0,
  129.         xaxis.Z, yaxis.Z, zaxis.Z, 0,
  130.            -xdp,    -ydp,    -zdp, 1
  131.     ];
  132. };
  133.  
  134. Matrix.CreatePerspectiveFieldOfView = function(Fov, AspectRatio, Near, Far)
  135. {
  136.     var yScale = 1 / Math.tan(Fov / 2);
  137.     var xScale = yScale / AspectRatio;
  138.    
  139.     return [
  140.         xScale,      0,                   0,  0,
  141.              0, yScale,                   0,  0,
  142.              0,      0,      Far/(Near-Far), -1,
  143.              0,      0, Near*Far/(Near-Far),  0
  144.     ];
  145. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement