File tree 1 file changed +16
-8
lines changed
1 file changed +16
-8
lines changed Original file line number Diff line number Diff line change @@ -854,15 +854,23 @@ namespace Langulus::A
854
854
CT::ScalarBased auto far
855
855
) {
856
856
using T = Lossless<decltype (aspect), decltype (near), decltype (far)>;
857
+ // https://www.scratchapixel.com/lessons/3d-basic-rendering/perspective-and-orthographic-projection-matrix/opengl-perspective-projection-matrix.html
858
+ const T scale = ::std::tan (T {fieldOfView.GetRadians ()} * T {0.5 }) * near;
859
+ const T r = scale;
860
+ const T l = -r;
861
+ const T t = scale / aspect;
862
+ const T b = -t;
863
+
857
864
auto result = Math::TMatrix<T, 4 >::Null ();
858
- const T t = :: std::tan ( T {fieldOfView. GetRadians () } * T { 0.5 } );
859
- const T r = far - near ;
865
+ result. mArray [ 0 ] = T {2 } * near / (r - l );
866
+ result. mArray [ 5 ] = T { 2 } * near / (t - b) ;
860
867
861
- result.mArray [0 ] = T { 1 } / t ;
862
- result.mArray [5 ] = aspect / t ;
863
- result.mArray [10 ] = -(far + near) / r ;
868
+ result.mArray [8 ] = (r + l) / (r - l) ;
869
+ result.mArray [9 ] = (t + b) / (t - b) ;
870
+ result.mArray [10 ] = - (far + near) / (far - near) ;
864
871
result.mArray [11 ] = T {-1 };
865
- result.mArray [14 ] = T {-2 } * far * near / r;
872
+
873
+ result.mArray [14 ] = T {-2 } * far * near / (far - near);
866
874
return result;
867
875
}
868
876
@@ -884,12 +892,12 @@ namespace Langulus::A
884
892
const auto d = T {-2 } * far * near / (far - near);
885
893
886
894
result[ 0 ] = x;
887
- result[ 8 ] = a;
888
895
result[ 5 ] = y;
896
+ result[ 8 ] = a;
889
897
result[ 9 ] = b;
890
898
result[10 ] = c;
891
- result[14 ] = d;
892
899
result[11 ] = -1 ;
900
+ result[14 ] = d;
893
901
return result;
894
902
}
895
903
You can’t perform that action at this time.
0 commit comments