簡體   English   中英

將3D變換轉換為2D

[英]Converting 3D transformation to 2D

我試圖想出一種在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::mat3的構造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
    );
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM