Matrix
The Matrix type encapsulates a 4x4 matrix that can be used in WebGL or for doing affine transformations on Vectors and other Matrices.
The matrix data is stored in column major order, which is the convention for WebGL matrices.
data[0] | data[4] | data[8] | data[12] |
data[1] | data[5] | data[9] | data[13] |
data[2] | data[6] | data[10] | data[14] |
data[3] | data[7] | data[11] | data[15] |
Transforming Vectors
Matrices are an efficient way to transform multiple vectors by the same transformation. Especially if the matrix can be cached.
typescript
const points = [...];const mat = Matrix.identity().translate(100, 100).scale(2).rotate(Math.PI / 2);// transform the pointsconst transformedPoints = points.map(p => mat.multiply(p));const inverse = mat.getAffineInverse();// undo the transform with the inverseconst originalPoints = points.map(p => inverse.multiply(p));
typescript
const points = [...];const mat = Matrix.identity().translate(100, 100).scale(2).rotate(Math.PI / 2);// transform the pointsconst transformedPoints = points.map(p => mat.multiply(p));const inverse = mat.getAffineInverse();// undo the transform with the inverseconst originalPoints = points.map(p => inverse.multiply(p));
Multiplying Matrices
Order matters when multiplying matrices A x B != B x A
. When multiplying matrices the order read in the code