转换矩阵问题

Transformation matrix issues

本文关键字:问题 转换      更新时间:2023-10-16

我正在通过现代OpenGL教程学习计算机图形学,并且在将代码从GLM重构为自定义矩阵数学类时遇到了问题。使用GLM I可以达到所需的效果(这是一个在屏幕上旋转的金字塔形状);然而,使用我的数学课,我无法得到正确的转换。作为参考,这就是我的数学课上的转换。使用GLM,形状将沿着x轴(水平)平移,这正是我想要的。我认为GLSL代码是正确的,因为它与GLM代码一起工作。

在我的Transform类中,我有一个函数,它返回一个模型矩阵,并映射到着色器类中相应的统一变量。

Matrix4f Transform::getModel() const // my math class - not working
{
    Matrix4f transMat, rotMat, scaleMat;
    transMat.initTranslation(trans.x, trans.y, trans.z);
    rotMat.initRotation(rot.x, rot.y, rot.z);
    scaleMat.initScale(scale.x, scale.y, scale.z);
    return transMat * rotMat * scaleMat;
}
glm::mat4 Transform::getModel() const // glm - works fine
{
    glm::mat4 transMat = glm::translate(glm::vec3(trans.x, trans.y, trans.z));
    glm::mat4 scaleMat = glm::scale(glm::vec3(scale.x, scale.y, scale.z));
    glm::mat4 rotX = glm::rotate(rot.x, glm::vec3(1.0, 0.0, 0.0));
    glm::mat4 rotY = glm::rotate(rot.y, glm::vec3(0.0, 1.0, 0.0));
    glm::mat4 rotZ = glm::rotate(rot.z, glm::vec3(0.0, 0.0, 1.0));
    glm::mat4 rotMat = rotX * rotY * rotZ;
    return transMat * rotMat * scaleMat;
}

我认为问题出在我的Matrix4<T>类上,但有相当多的代码要显示,所以我将进行链接。Matrix类基于我上面链接的教程。

附言:如果你想知道我为什么用自定义数学课而不是GLM,那是为了学习(我意识到GLM比我未经测试的库更适合这个)。

感谢您的帮助,我所需要做的就是更改glUniformMatrix*中的第三个参数,该参数对变换矩阵执行转置。