Skip to content

Commit

Permalink
[Update] Projection Matrix invertedZ
Browse files Browse the repository at this point in the history
  • Loading branch information
mrouffet committed Feb 12, 2024
1 parent ce12e48 commit fcf0a54
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 13 deletions.
2 changes: 1 addition & 1 deletion Include/SA/Maths/Matrix/Matrix4.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -406,7 +406,7 @@ namespace SA
*
* \return perspective matrix.
*/
static Mat4 MakePerspective(T _fov = T(90.0), T _aspect = T(1.0), T _near = T(0.35), T _far = T(10.0)) noexcept;
static Mat4 MakePerspective(T _fov = T(90.0), T _aspect = T(1.0), T _near = T(0.35), T _far = T(10.0), bool _bInvertedZ = false) noexcept;

//}

Expand Down
40 changes: 28 additions & 12 deletions Include/SA/Maths/Matrix/Matrix4.inl
Original file line number Diff line number Diff line change
Expand Up @@ -551,18 +551,34 @@ namespace SA


template <typename T, MatrixMajor major>
Mat4<T, major> Mat4<T, major>::MakePerspective(T _fov, T _aspect, T _near, T _far) noexcept
{
// TODO: Clean.
//const T scale = T(1) / std::tan((_fov / T(2)) * Maths::DegToRad<T>);
T tan_half_angle = std::tan(Maths::DegToRad<T> * _fov / T(2));

return Mat4(
1 / (_aspect * tan_half_angle), 0, 0, 0,
0, 1 / (tan_half_angle), 0, 0,
0, 0, -_far / (_far - _near), -(2 * _far * _near) / (_far - _near),
0, 0, -1, 0
);
Mat4<T, major> Mat4<T, major>::MakePerspective(T _fov, T _aspect, T _near, T _far, bool _bInvertedZ) noexcept
{
const T focalLength = T(1) / std::tan(Maths::DegToRad<T> * _fov / T(2));

if (_bInvertedZ)
{
//const T A = _near / (_far - _near);
//const T B = (_far * _near) / (_far - _near);

return Mat4(
_aspect / focalLength, 0, 0, 0,
0, T(1) / focalLength, 0, 0,
0, 0, 0, (_far - _near) / (_far * _near) /* 1 / B */,
0, 0, -1, (_far - _near) / (_far * _far - _far) /* A / B */
);

}
else
{
// GLM implementation.

return Mat4(
focalLength / _aspect, 0, 0, 0,
0, focalLength, 0, 0,
0, 0, -(_far + _near) / (_far - _near), -(2 * _far * _near) / (_far - _near),
0, 0, -1, 0
);
}
}

//}
Expand Down

0 comments on commit fcf0a54

Please sign in to comment.