lookAt method
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);
}