MatrixD.compose constructor

MatrixD.compose(
  1. Vector3D translation,
  2. QuaternionD rotation,
  3. Vector3D scale
)

Returns a transformation matrix composed of a rotational, translational and scaling components.

Implementation

factory MatrixD.compose(
  Vector3D translation,
  QuaternionD rotation,
  Vector3D scale,
) {
  Vector3D right = .vec3(1.0, 0.0, 0.0);
  Vector3D up = .vec3(0.0, 1.0, 0.0);
  Vector3D forward = .vec3(0.0, 0.0, 1.0);

  right = right.scale(scale.x);
  up = up.scale(scale.y);
  forward = forward.scale(scale.z);

  right = right.rotateByQuaternion(rotation);
  up = up.rotateByQuaternion(rotation);
  forward = forward.rotateByQuaternion(rotation);

  return .mat4RowMajor(
    right.x, up.x, forward.x, translation.x,
    right.y, up.y, forward.y, translation.y,
    right.z, up.z, forward.z, translation.z,
    0.0, 0.0, 0.0, 1.0,
  );
}