leftTranslate method

void leftTranslate(
  1. dynamic x,
  2. [double y = 0.0,
  3. double z = 0.0]
)

Multiply this by a translation from the left. The translation can be specified with a Vector3, Vector4, or x, y, z.

Implementation

void leftTranslate(dynamic x, [double y = 0.0, double z = 0.0]) {
  double tx;
  double ty;
  double tz;
  final tw = x is Vector4 ? x.w : 1.0;
  if (x is Vector3) {
    tx = x.x;
    ty = x.y;
    tz = x.z;
  } else if (x is Vector4) {
    tx = x.x;
    ty = x.y;
    tz = x.z;
  } else if (x is double) {
    tx = x;
    ty = y;
    tz = z;
  } else {
    throw UnimplementedError();
  }

  // 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];
}