blob: fd440d5655900c9796bc10d387117f4d4853477d [file] [log] [blame]
function matrixManagerFunction(){
var mat = new Matrix();
var returnMatrix3D = function(rX, rY, rZ, scaleX, scaleY, scaleZ, tX, tY, tZ) {
var rotationXMatrix, rotationYMatrix, rotationZMatrix, s, scaleMatrix, transformationMatrix, translationMatrix;
rotationXMatrix = $M([
[1, 0, 0, 0],
[0, Math.cos(rX), Math.sin(-rX), 0],
[0, Math.sin(rX), Math.cos(rX), 0],
[0, 0, 0, 1]]);
rotationYMatrix = $M([
[Math.cos(rY), 0, Math.sin(rY), 0],
[0, 1, 0, 0],
[Math.sin(-rY), 0, Math.cos(rY), 0],
[0, 0, 0, 1]]);
rotationZMatrix = $M([
[Math.cos(rZ), Math.sin(-rZ), 0, 0],
[Math.sin(rZ), Math.cos(rZ), 0, 0],
[0, 0, 1, 0],
[0, 0, 0, 1]]);
scaleMatrix = $M([[scaleX, 0, 0, 0], [0, scaleY, 0, 0], [0, 0, scaleZ, 0], [0, 0, 0, 1]]);
transformationMatrix = rotationXMatrix.x(rotationYMatrix).x(rotationZMatrix).x(scaleMatrix);
transformationMatrix = transformationMatrix.transpose();
translationMatrix = $M([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [tX, tY, tZ, 1]]);
transformationMatrix = transformationMatrix.x(translationMatrix); // Apply transformation matrix AFTER transposing rotation and scale
s = "matrix3d(";
s += transformationMatrix.e(1, 1).toFixed(5) + "," + transformationMatrix.e(1, 2).toFixed(5) + "," + transformationMatrix.e(1, 3).toFixed(5) + "," + transformationMatrix.e(1, 4).toFixed(5) + ",";
s += transformationMatrix.e(2, 1).toFixed(5) + "," + transformationMatrix.e(2, 2).toFixed(5) + "," + transformationMatrix.e(2, 3).toFixed(5) + "," + transformationMatrix.e(2, 4).toFixed(5) + ",";
s += transformationMatrix.e(3, 1).toFixed(5) + "," + transformationMatrix.e(3, 2).toFixed(5) + "," + transformationMatrix.e(3, 3).toFixed(5) + "," + transformationMatrix.e(3, 4).toFixed(5) + ",";
s += transformationMatrix.e(4, 1).toFixed(5) + "," + transformationMatrix.e(4, 2).toFixed(5) + "," + transformationMatrix.e(4, 3).toFixed(5) + "," + transformationMatrix.e(4, 4).toFixed(5);
s += ")";
return s;
};
/*var returnMatrix2D = function(rX, scaleX, scaleY, tX, tY){
var rotationMatrix, s, scaleMatrix, transformationMatrix, translationMatrix;
//cos(X), sin(X), -sin(X), cos(X)
rotationMatrix = $M([
[Math.cos(-rX), Math.sin(-rX), 0],
[Math.sin(rX), Math.cos(-rX), 0],
[0, 0, 1]
]);
scaleMatrix = $M([[scaleX, 0, 0], [0, scaleY, 0], [0, 0, 1]]);
transformationMatrix = rotationMatrix.x(scaleMatrix);
transformationMatrix = transformationMatrix.transpose();
translationMatrix = $M([[1, 0, 0], [0, 1, 0], [tX, tY, 1]]);
transformationMatrix = transformationMatrix.x(translationMatrix);
s = "matrix(";
s += transformationMatrix.e(1, 1).toFixed(5) + "," + transformationMatrix.e(1, 2).toFixed(5) + ",";
s += transformationMatrix.e(2, 1).toFixed(5) + "," + transformationMatrix.e(2, 2).toFixed(5) + ",";
s += transformationMatrix.e(3, 1).toFixed(5) + "," + transformationMatrix.e(3, 2).toFixed(5);
s += ")";
return s;
};*/
var returnMatrix2D = function(rX, scaleX, scaleY, tX, tY){
return mat.reset().translate(tX,tY).rotate(rX).scale(scaleX,scaleY).toCSS();
};
/*var returnMatrix2DArray = function(rX, scaleX, scaleY, tX, tY){
var rotationMatrix, scaleMatrix, transformationMatrix, translationMatrix;
//cos(X), sin(X), -sin(X), cos(X)
rotationMatrix = $M([
[Math.cos(-rX), Math.sin(-rX), 0],
[Math.sin(rX), Math.cos(-rX), 0],
[0, 0, 1]
]);
scaleMatrix = $M([[scaleX, 0, 0], [0, scaleY, 0], [0, 0, 1]]);
transformationMatrix = rotationMatrix.x(scaleMatrix);
transformationMatrix = transformationMatrix.transpose();
translationMatrix = $M([[1, 0, 0], [0, 1, 0], [tX, tY, 1]]);
transformationMatrix = transformationMatrix.x(translationMatrix);
return [transformationMatrix.e(1, 1).toFixed(5),transformationMatrix.e(1, 2).toFixed(5)
,transformationMatrix.e(2, 1).toFixed(5),transformationMatrix.e(2, 2).toFixed(5)
,transformationMatrix.e(3, 1).toFixed(5),transformationMatrix.e(3, 2).toFixed(5)];
};*/
var returnMatrix2DArray = function(rX, scaleX, scaleY, tX, tY){
return mat.reset().translate(tX,tY).rotate(rX).scale(scaleX,scaleY).toArray();
};
var get2DMatrix = function(animData){
return returnMatrix2D(animData.r
,animData.s[0],animData.s[1]
,animData.p[0],animData.p[1]);
};
var getMatrix = function(animData, isThreeD){
if(!isThreeD){
return returnMatrix2D(animData.tr.r[2]
,animData.tr.s[0],animData.tr.s[1]
,animData.tr.p[0],animData.tr.p[1]);
}
return returnMatrix3D(-animData.tr.r[0],animData.tr.r[1],animData.tr.r[2]
,animData.tr.s[0],animData.tr.s[1],animData.tr.s[2]
,animData.tr.p[0],animData.tr.p[1],animData.tr.p[2])
};
var getMatrix2 = function(animData, isThreeD){
if(!isThreeD){
return returnMatrix2D(animData.r[2]
,animData.s[0],animData.s[1]
,animData.p[0],animData.p[1]);
}
return returnMatrix3D(-animData.r[0],animData.r[1],animData.r[2]
,animData.s[0],animData.s[1],animData.s[2]
,animData.p[0],animData.p[1],animData.p[2])
};
var getMatrixArray = function(animData, isThreeD){
if(!isThreeD){
return returnMatrix2DArray(animData.r[2]
,animData.s[0],animData.s[1]
,animData.p[0],animData.p[1]);
}
return null;
};
return {
get2DMatrix : get2DMatrix,
getMatrix : getMatrix,
getMatrix2 : getMatrix2,
getMatrixArray : getMatrixArray,
getMatrixArrayFromParams : returnMatrix2DArray,
getMatrix2FromParams : returnMatrix2D
}
};
var MatrixManager = matrixManagerFunction;