code: public static Matrix4x4D lookAtRH(
      final Vector3D camera,
      final Vector3D target,
      final Vector3D up)
    {
      NullCheck.notNull(camera, "Camera position");
      NullCheck.notNull(target, "Target point");
      NullCheck.notNull(up, "Up vector");
  
      final Vector3D forward =
        Vectors3D.normalize(Vectors3D.subtract(target, camera));
      final Vector3D side =
        Vectors3D.normalize(Vectors3D.crossProduct(forward, up));
      final Vector3D new_up =
        Vectors3D.crossProduct(side, forward);
  
      final Matrix4x4D rotation =
        Matrix4x4D.of(
          side.x(), side.y(), side.z(), 0.0,
          new_up.x(), new_up.y(), new_up.z(), 0.0,
          -forward.x(), -forward.y(), -forward.z(), 0.0,
          0.0, 0.0, 0.0, 1.0);
  
      final Matrix4x4D translation =
        Matrices4x4D.ofTranslation(-camera.x(), -camera.y(), -camera.z());
  
      return Matrices4x4D.multiply(rotation, translation);
    }
docs: <p>Calculate a view matrix representing a camera looking from the point
  {@code camera} to the point {@code target}. {@code target} must represent
  the "up" vector for the camera. Usually, this is simply a unit vector
  {@code (0, 1, 0)} representing the Y axis.</p>
  
  <p>The function assumes a right-handed coordinate system.</p>
  
  @param camera The position of the viewer.
  @param target The target being viewed.
  @param up     The up vector.
  
  @return The view matrix