2017-08-23 30 views
1

OpenGLで3D変換マトリックスを2Dに変換する方法を理解しようとしています。私のZ座標は無視されます(私は地上投影を使って作業しています)。ここで3D変換を2Dに変換

は私が達成しようとしているものの例である:

// 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.; 

それを行うのきれいな方法があるかどうか質問はありますか?たぶん、マトリックススライス、またはサブマトリックス抽出を使用して?

+2

ほとんど分かりのようになります: '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); ' – Rabbid76

答えて

3

最も分かり、おそらく最良の実施方法は、インラインメソッドまたは関数を記述すると、直接glm::mat3のコンストラクタを使用することです:

glm::mat3 Mat3Dto2D(const glm::mat4 & m) 
{ 
    return glm::mat3(
     m[0][0], m[0][1], 0.0f, 
     m[1][0], m[1][1], 0.0f, 
     m[3][0], m[3][1], 1.0f 
    ); 
} 
+0

これは、私が今やっていることです - サブ行列/行/列の組み合わせを使って行列を構築する方法はありますか?一般的に私は読み取り可能な1ライナーを探しています:) – RafazZ

+1

@RafazZ一般的に読める1つのライナーは、 – Rabbid76

関連する問題