Multiply this by a translation from the left.
The translation can be specified with a Vector3, Vector4, or x, y, z.
Source
void leftTranslate(x, [double y = 0.0, double z = 0.0]) {
double tx;
double ty;
double tz;
double tw = x is Vector4 ? x.w : 1.0;
if (x is Vector3 || x is Vector4) {
tx = x.x;
ty = x.y;
tz = x.z;
} else {
tx = x;
ty = y;
tz = z;
}
// Column 1
_m4storage[0] += tx * _m4storage[3];
_m4storage[1] += ty * _m4storage[3];
_m4storage[2] += tz * _m4storage[3];
_m4storage[3] = tw * _m4storage[3];
// Column 2
_m4storage[4] += tx * _m4storage[7];
_m4storage[5] += ty * _m4storage[7];
_m4storage[6] += tz * _m4storage[7];
_m4storage[7] = tw * _m4storage[7];
// Column 3
_m4storage[8] += tx * _m4storage[11];
_m4storage[9] += ty * _m4storage[11];
_m4storage[10] += tz * _m4storage[11];
_m4storage[11] = tw * _m4storage[11];
// Column 4
_m4storage[12] += tx * _m4storage[15];
_m4storage[13] += ty * _m4storage[15];
_m4storage[14] += tz * _m4storage[15];
_m4storage[15] = tw * _m4storage[15];
}