【发布时间】:2017-08-23 20:43:37
【问题描述】:
我正在尝试找出一种在 OpenGL 中将 3D 转换矩阵转换为 2D 的方法。我的 z 坐标被忽略(我正在处理地面投影)。
这是我想要实现的一个示例:
// Given a transformation matrix
// | r00 r01 r01 t0 |
// | r10 r11 r11 t1 |
// | r20 r21 r21 t2 |
// | 0. 0. 0. 1. |
//
// Ignore the z-coordinate, and convert it to
// | r00 r01 t0 |
// | r10 r11 t1 |
// | 0. 0. 1. |
glm::dmat4 t_matrix_3D = GetTransformation();
glm::dmat3 t_matrix_2D = glm::dmat3(t_matrix_3D);
t_matrix_2D[2] = dvec3(dvec2(t_matrix_3D[3]), 1.);
t_matrix_2D[0][2] = 0.;
t_matrix_2D[1][2] = 0.;
问题是有没有更漂亮的方法呢?也许使用矩阵切片,或子矩阵提取?
【问题讨论】:
-
最容易理解的应该是:
glm::mat4 m4;glm::mat3 m3( m4[0][0], m4[0][1], 0.0f, m4[1][0], m4[1][1], 0.0f, m4[3][0], m4[3][1], 1.0f );
标签: c++ opengl matrix glm-math coordinate-transformation