transformMat4 function

List<double> transformMat4(
  1. List<double> out,
  2. List<double> a,
  3. List<double> m
)

Transforms the vec3 with a mat4. 4th vector component is implicitly '1'

@param {vec3} out the receiving vector @param {ReadonlyVec3} a the vector to transform @param {ReadonlyMat4} m matrix to transform with @returns {vec3} out

Implementation

List<double> transformMat4(List<double> out, List<double> a, List<double> m) {
  final x = a[0], y = a[1], z = a[2];
  double w = m[3] * x + m[7] * y + m[11] * z + m[15];
  // w ??= 1.0;
  out[0] = (m[0] * x + m[4] * y + m[8] * z + m[12]) / w;
  out[1] = (m[1] * x + m[5] * y + m[9] * z + m[13]) / w;
  out[2] = (m[2] * x + m[6] * y + m[10] * z + m[14]) / w;
  return out;
}