fn view(eye: Vector3<f32>, dir: Vector3<f32>) -> Matrix4<f32> {
    let f = dir.normalize();

    // let s = f.cross(up).normalize();
    let s = Vector3::new(-f.z, 0.0, f.x);
    let mag = (s.x * s.x + s.z * s.z).sqrt().recip();
    let s = Vector3::new(s.x * mag, 0.0, s.z * mag);