OpenGL 2D变换矩阵混淆

时间:2014-07-31 13:44:30

标签: c++ opengl glm-math

我从各种在线资源中学习OpenGL 3+,最近对转换(模型)矩阵感到困惑。据我所知,正确的乘法顺序是translationMatrix * rotationMatrix * scaleMatrix。如果我理解正确的乘法是向后的,那么首先应用比例,然后是旋转,最后是变换。

我有一个Transform类,它将位置,比例和原点存储为2d向量,将旋转存储为浮点数。计算变换矩阵的方法如下:

glm::mat4 Transform::getTransformationMatrix() const
{
    glm::mat4 result = glm::mat4(1.0f);

    result = glm::translate(result, glm::vec3(position, 0.0f));
    result = glm::translate(result, glm::vec3(origin, 0.0f));
    result = glm::rotate(result, rotation, glm::vec3(0, 0, 1));
    result = glm::translate(result, glm::vec3(-origin, 0.0f));
    result = glm::scale(result, glm::vec3(scale, 0.0f));

    return result;
}

这里是顶点着色器代码:

#version 330 core

layout(location = 0) in vec2 position;

uniform mat4 modelMatrix;
uniform mat4 projectionMatrix;

void main()
{
    gl_Position =  projectionMatrix * modelMatrix * vec4(position, 0.0, 1.0);
}

正如你所看到的,我首先翻译然后旋转和缩放,这与我学到的相反。 起初我有正确的方式(缩放,旋转和平移),但它绕着初始位置旋转,半径很大,而不是翻译的位置,这不是我想要的(我正在用精灵制作2D游戏)< / strong>即可。我不明白为什么它会这样工作,有人可以解释,我是否必须为变换矩阵计算保留单独的方法?它在3d空间中的工作方式是否相同?

0 个答案:

没有答案