matrix: remove a divide in look_at
This commit is contained in:
parent
ced088f6b8
commit
a1666a179b
13
matrix.cpp
13
matrix.cpp
@ -261,16 +261,19 @@ template <size_t S, typename T>
|
|||||||
matrix4<T>
|
matrix4<T>
|
||||||
matrix<S,T>::perspective (T fov, T aspect, range<T> Z)
|
matrix<S,T>::perspective (T fov, T aspect, range<T> Z)
|
||||||
{
|
{
|
||||||
T f = std::tan (fov / 2);
|
CHECK_GE (Z.min, 0);
|
||||||
|
CHECK_GE (Z.max, 0);
|
||||||
|
|
||||||
T tx = 1 / (f * aspect);
|
T f = 1 / std::tan (fov / 2);
|
||||||
T ty = 1 / f;
|
|
||||||
|
T x = f / aspect;
|
||||||
|
T y = f;
|
||||||
T z1 = (Z.max + Z.min) / (Z.min - Z.max);
|
T z1 = (Z.max + Z.min) / (Z.min - Z.max);
|
||||||
T z2 = (2 * Z.max * Z.min) / (Z.min - Z.max);
|
T z2 = (2 * Z.max * Z.min) / (Z.min - Z.max);
|
||||||
|
|
||||||
return { {
|
return { {
|
||||||
{ tx, 0, 0, 0 },
|
{ x, 0, 0, 0 },
|
||||||
{ 0, ty, 0, 0 },
|
{ 0, y, 0, 0 },
|
||||||
{ 0, 0, z1, z2 },
|
{ 0, 0, z1, z2 },
|
||||||
{ 0, 0, -1, 0 }
|
{ 0, 0, -1, 0 }
|
||||||
} };
|
} };
|
||||||
|
Loading…
Reference in New Issue
Block a user