function mat4() { return [ 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 ] } function orthographic(pLeft, pRight, pBottom, pTop) { const lResult = mat4(); lResult[0] = 2.0 / (pRight - pLeft); lResult[5] = 2.0 / (pTop - pBottom); lResult[10] = 1.0; lResult[12] = -(pRight + pLeft) / (pRight - pLeft); lResult[13] = -(pTop + pBottom) / (pTop - pBottom); return lResult; } function translateMatrix(m, x, y, z) { m = [...m]; m[12] += x; m[13] += y; m[14] += z; return m; } function rotateMatrix2d(m, angle) { m = [...m]; m[0] = Math.cos(angle); m[1] = -Math.sin(angle); m[4] = Math.sin(angle); m[5] = Math.cos(angle); return m; } function scaleMatrix(m, x, y, z) { m = [...m]; m[0] = m[0] * x; m[5] = m[5] * y; m[10] = m[10] * z; return m; }