code: public Matrix4f perspectiveLH(float fovy, float aspect, float zNear, float zFar, boolean zZeroToOne) {
          return perspectiveLH(fovy, aspect, zNear, zFar, zZeroToOne, thisOrNew());
      }
docs: Apply a symmetric perspective projection frustum transformation for a left-handed coordinate system
  using the given NDC z range to this matrix.
  <p>
  If <code>M</code> is <code>this</code> matrix and <code>P</code> the perspective projection matrix,
  then the new matrix will be <code>M * P</code>. So when transforming a
  vector <code>v</code> with the new matrix by using <code>M * P * v</code>,
  the perspective projection will be applied first!
  <p>
  In order to set the matrix to a perspective frustum transformation without post-multiplying,
  use {@link #setPerspectiveLH(float, float, float, float, boolean) setPerspectiveLH}.
  
  @see #setPerspectiveLH(float, float, float, float, boolean)
  
  @param fovy
  the vertical field of view in radians (must be greater than zero and less than {@link Math#PI PI})
  @param aspect
  the aspect ratio (i.e. width / height; must be greater than zero)
  @param zNear
  near clipping plane distance. If the special value {@link Float#POSITIVE_INFINITY} is used, the near clipping plane will be at positive infinity.
  In that case, <code>zFar</code> may not also be {@link Float#POSITIVE_INFINITY}.
  @param zFar
  far clipping plane distance. If the special value {@link Float#POSITIVE_INFINITY} is used, the far clipping plane will be at positive infinity.
  In that case, <code>zNear</code> may not also be {@link Float#POSITIVE_INFINITY}.
  @param zZeroToOne
  whether to use Vulkan's and Direct3D's NDC z range of <code>[0..+1]</code> when <code>true</code>
  or whether to use OpenGL's NDC z range of <code>[-1..+1]</code> when <code>false</code>
  @return a matrix holding the result