我正在通过modern OpenGL tutorials了解计算机图形学,我遇到了将我的代码从GLM重构为自定义矩阵数学类的问题。使用GLM我可以达到预期的效果(这是一种在屏幕上旋转的金字塔状形状);但是,使用我的数学课我无法得到正确的转换。作为参考,this是我的数学课的转换。使用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>
课程中,但是有很多代码要展示,所以我会link. Matrix课程基于我上面链接的教程。
P.S。如果您想知道我为什么使用自定义数学课而不是GLM,那么它是出于学习目的(我意识到GLM比我未经测试的库更适合这个)。
答案 0 :(得分:0)
感谢您提供有用的评论,我需要做的就是更改glUniformMatrix *中的第3个参数,该参数在转换矩阵上执行转置。