1 #ifndef ANDROID_DVR_ORTHO_H_
2 #define ANDROID_DVR_ORTHO_H_
3
4 #include <private/dvr/types.h>
5
6 namespace android {
7 namespace dvr {
8
9 template <class T>
OrthoMatrix(T left,T right,T bottom,T top,T znear,T zfar)10 Eigen::AffineMatrix<T, 4> OrthoMatrix(T left, T right, T bottom, T top,
11 T znear, T zfar) {
12 Eigen::AffineMatrix<T, 4> result;
13 const T t2 = static_cast<T>(2);
14 const T a = t2 / (right - left);
15 const T b = t2 / (top - bottom);
16 const T c = t2 / (zfar - znear);
17 const T xoff = -(right + left) / (right - left);
18 const T yoff = -(top + bottom) / (top - bottom);
19 const T zoff = -(zfar + znear) / (zfar - znear);
20 const T t1 = static_cast<T>(1);
21 result.matrix() << a, 0, 0, xoff,
22 0, b, 0, yoff,
23 0, 0, c, zoff,
24 0, 0, 0, t1;
25 return result;
26 }
27
28 } // namespace android
29 } // namespace dvr
30
31 #endif // ANDROID_DVR_ORTHO_H_
32