lookAt method

void lookAt(
  1. Vector3 eye,
  2. Vector3 target, {
  3. Vector3? up,
})

Sets view to look from eye at target, with up (default -Y, the engine's up).

Implementation

void lookAt(Vector3 eye, Vector3 target, {Vector3? up}) {
  final u = up ?? Vector3(0, -1, 0);
  // The engine's camera looks along +Z with +Y down: forward f, right r =
  // up × f... with +Y down, screen-down is -up.
  final f = (target - eye)..normalize();
  final down = Vector3(-u.x, -u.y, -u.z);
  // right = down × forward (x right, y down, z forward is right-handed).
  final r = down.cross(f)..normalize();
  final d = f.cross(r);
  final m = view.storage;
  m[0] = r.x;
  m[4] = r.y;
  m[8] = r.z;
  m[1] = d.x;
  m[5] = d.y;
  m[9] = d.z;
  m[2] = f.x;
  m[6] = f.y;
  m[10] = f.z;
  m[3] = 0;
  m[7] = 0;
  m[11] = 0;
  m[12] = -(r.x * eye.x + r.y * eye.y + r.z * eye.z);
  m[13] = -(d.x * eye.x + d.y * eye.y + d.z * eye.z);
  m[14] = -(f.x * eye.x + f.y * eye.y + f.z * eye.z);
  m[15] = 1;
  cameraPosition.setFrom(eye);
}