Apply an asymmetric off-center perspective projection frustum transformation for a left-handed coordinate system
using the given NDC z range to this matrix.
<p>
The given angles <code>angleLeft</code> and <code>angleRight</code> are the horizontal angles between
the left and right frustum planes, respectively, and a line perpendicular to the near and far frustum planes.
The angles <code>angleDown</code> and <code>angleUp</code> are the vertical angles between
the bottom and top frustum planes, respectively, and a line perpendicular to the near and far frustum planes.
<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 #setPerspectiveOffCenterFovLH(double, double, double, double, double, double, bool) setPerspectiveOffCenterFovLH}.
@param angleLeft
the horizontal angle between left frustum plane and a line perpendicular to the near/far frustum planes.
For a symmetric frustum, this value is negative.
@param angleRight
the horizontal angle between right frustum plane and a line perpendicular to the near/far frustum planes
@param angleDown
the vertical angle between bottom frustum plane and a line perpendicular to the near/far frustum planes.
For a symmetric frustum, this value is negative.
@param angleUp
the vertical angle between top frustum plane and a line perpendicular to the near/far frustum planes
@param zNear
near clipping plane distance. This value must be greater than zero.
If the special value {@link Double#POSITIVE_INFINITY} is used, the near clipping plane will be at positive infinity.
In that case, <code>zFar</code> may not also be {@link Double#POSITIVE_INFINITY}.
@param zFar
far clipping plane distance. This value must be greater than zero.
If the special value {@link Double#POSITIVE_INFINITY} is used, the far clipping plane will be at positive infinity.
In that case, <code>zNear</code> may not also be {@link Double#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 this
Apply an asymmetric off-center perspective projection frustum transformation for a left-handed coordinate system using the given NDC z range to this matrix. <p> The given angles <code>angleLeft</code> and <code>angleRight</code> are the horizontal angles between the left and right frustum planes, respectively, and a line perpendicular to the near and far frustum planes. The angles <code>angleDown</code> and <code>angleUp</code> are the vertical angles between the bottom and top frustum planes, respectively, and a line perpendicular to the near and far frustum planes. <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 #setPerspectiveOffCenterFovLH(double, double, double, double, double, double, bool) setPerspectiveOffCenterFovLH}.
@see #setPerspectiveOffCenterFovLH(double, double, double, double, double, double, bool)
@param angleLeft the horizontal angle between left frustum plane and a line perpendicular to the near/far frustum planes. For a symmetric frustum, this value is negative. @param angleRight the horizontal angle between right frustum plane and a line perpendicular to the near/far frustum planes @param angleDown the vertical angle between bottom frustum plane and a line perpendicular to the near/far frustum planes. For a symmetric frustum, this value is negative. @param angleUp the vertical angle between top frustum plane and a line perpendicular to the near/far frustum planes @param zNear near clipping plane distance. This value must be greater than zero. If the special value {@link Double#POSITIVE_INFINITY} is used, the near clipping plane will be at positive infinity. In that case, <code>zFar</code> may not also be {@link Double#POSITIVE_INFINITY}. @param zFar far clipping plane distance. This value must be greater than zero. If the special value {@link Double#POSITIVE_INFINITY} is used, the far clipping plane will be at positive infinity. In that case, <code>zNear</code> may not also be {@link Double#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 this