C++ 理解glm矩阵格式

C++ 理解glm矩阵格式,c++,matrix,glm-math,C++,Matrix,Glm Math,在执行一些矩阵计算的过程中,我在使用GLM时遇到了一些问题。我从我的老师/教授那里得到了一些代码,我需要使用glm实现这部分代码。他用了一些自己写的旧文库 以下是一些原始代码,以便更好地理解: Mtx4x4 Mo = Mtx4x4(cam.right.x, cam.right.y, cam.right.z, cam.right*-cam.pos, cam.up.x, cam.up.y, cam.up.z, cam.up*-cam.pos,

在执行一些矩阵计算的过程中,我在使用GLM时遇到了一些问题。我从我的老师/教授那里得到了一些代码,我需要使用glm实现这部分代码。他用了一些自己写的旧文库

以下是一些原始代码,以便更好地理解:

Mtx4x4 Mo = Mtx4x4(cam.right.x, cam.right.y, cam.right.z, cam.right*-cam.pos,
                   cam.up.x, cam.up.y, cam.up.z, cam.up*-cam.pos,
                   -cam.front.x, -cam.front.y, -cam.front.z, -cam.front*-cam.pos,
                   0.0, 0.0, 0.0, 1.0);
对于这一点,使用什么是显而易见的:glm::mat4应该是选择,但这里也是我的第一个问题:glm::mat4的参数应该是什么顺序?读到有关行大调和列大调顺序的内容时,我感到非常困惑。在我的C++代码中,我用下面的代码创建Mat4:

Mo = glm::mat4( orgCameraMat[0].x, orgCameraMat[0].y, orgCameraMat[0].z, (float)glm::dot(orgCameraMat[0],-orgCameraMat[3]), 
                        orgCameraMat[1].x, orgCameraMat[1].y, orgCameraMat[1].z, glm::dot(orgCameraMat[1],-orgCameraMat[3]), 
                        -orgCameraMat[2].x, -orgCameraMat[2].y, -orgCameraMat[2].z, glm::dot(-orgCameraMat[2],-orgCameraMat[3]), 
                        0.0f,0.0f,0.0f,1.0f);
这里我使用了一些其他名称,但orgCameraMat是相机的模型视图矩阵,名为glm::mat4(使用glm::lookAt创建)

我的第一个问题是:这些矩阵相等吗?我的代码生成的矩阵与上面的代码相同吗

我的第二个问题是:稍后在给定的代码中,他们使用Mtx3x4 Pt(我假设它是从MTX4 p=透视图(视野、方向、近距离、远距离)创建的)

以下是代码的计算结果:

Mtx4x4 P = perspectiveHorz(renderData.ofov, displayAspect, 0.1, 1000);
Mtx3x4 To = Mtx3x4(P) * Mo;
Mo是上面创建的4x4矩阵(见第一个问题)。 现在3x4矩阵是什么样子

x x x x              x x x
x x x x        Or    x x x 
x x x x              x x x
                     x x x 
以下是我使用GLM为第二部分所做的工作:

glm::mat4x3 pt = glm::mat4x3(

        P[0].x, P[0].y, P[0].z,
        P[1].x, P[1].y, P[1].z,
        P[2].x, P[2].y, P[2].z,
        P[3].x, P[3].y, P[3].z

                                );


    glm::mat4x3 To = pt * Mo;