1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| Eigen::Matrix4f get_projection_matrix(float eye_fov, float aspect_ratio, float zNear, float zFar) {
Eigen::Matrix4f projection = Eigen::Matrix4f::Identity(); float fov = eye_fov * MY_PI / 180.0f; float top = -zNear * tan(fov * 0.5); Eigen::Matrix4f M_ortho; Eigen::Matrix4f M_persp2ortho;
M_ortho << 1 / (aspect_ratio * top), 0, 0, 0, 0, 1 / top, 0, 0, 0, 0, -2 / zFar - zNear, -(zFar + zNear) / (zFar - zNear), 0, 0, 0, 1;
M_persp2ortho << zNear, 0, 0, 0, 0, zNear, 0, 0, 0, 0, zNear + zFar, -zNear * zFar, 0, 0, 1, 0;
projection = M_ortho * M_persp2ortho;
return projection; }
|