code: public Matrix4f perspectiveFrustumSlice(float near, float far, Matrix4f dest) {
          float invOldNear = (m23 + m22) / m32;
          float invNearFar = 1.0f / (near - far);
          dest._m00(m00 * invOldNear * near);
          dest._m01(m01);
          dest._m02(m02);
          dest._m03(m03);
          dest._m10(m10);
          dest._m11(m11 * invOldNear * near);
          dest._m12(m12);
          dest._m13(m13);
          dest._m20(m20);
          dest._m21(m21);
          dest._m22((far + near) * invNearFar);
          dest._m23(m23);
          dest._m30(m30);
          dest._m31(m31);
          dest._m32((far + far) * near * invNearFar);
          dest._m33(m33);
          dest._properties(properties & ~(PROPERTY_IDENTITY | PROPERTY_TRANSLATION | PROPERTY_ORTHONORMAL));
          return dest;
      }
docs: Change the near and far clip plane distances of <code>this</code> perspective frustum transformation matrix
  and store the result in <code>dest</code>.
  <p>
  This method only works if <code>this</code> is a perspective projection frustum transformation, for example obtained
  via {@link #perspective(float, float, float, float) perspective()} or {@link #frustum(float, float, float, float, float, float) frustum()}.
  
  @see #perspective(float, float, float, float)
  @see #frustum(float, float, float, float, float, float)
  
  @param near
  the new near clip plane distance
  @param far
  the new far clip plane distance
  @param dest
  will hold the resulting matrix
  @return dest