在Z轴上旋转的模型关闭

时间:2014-05-14 09:31:10

标签: c++ opengl matrix rotation

我正试图通过矩阵在它自己的轴上旋转一个物体,但我遇到了一个问题。在X轴或Y轴上旋转会产生预期的结果,但是当在Z轴上旋转时,整个模型似乎围绕Z轴旋转,好像在它下面有一个看不见的极点,从那里旋转X或Y轴,隐形杆穿过模型。

glm::mat4 rotateMatrix(GLfloat angle, glm::vec3 axis)
{
    axis = glm::normalize(axis);
    GLfloat s = sin(angle);
    GLfloat c = cos(angle);
    GLfloat oc = 1.0f - c;

    return glm::mat4(
        oc * axis.x * axis.x + c,          oc * axis.x * axis.y - axis.z * s, oc * axis.z * axis.x + axis.y * s, 0.0,
        oc * axis.x * axis.y + axis.z * s, oc * axis.y * axis.y + c,          oc * axis.y * axis.z - axis.x * s, 0.0,
        oc * axis.z * axis.x - axis.y * s, oc * axis.y * axis.z + axis.x * s, oc * axis.z * axis.z + c,          0.0,
        0.0,                               0.0,                               0.0,                               1.0
        );
}

在绘制功能中:

_prog.setUniform("Translation", glm::vec3(0.0f, 20.0f, -20.0f));
_prog.setUniform("Rotate", rotateMatrix(45.0f, glm::vec3(0.0f, 0.0f, 1.0f)));
_model.render();

1 个答案:

答案 0 :(得分:0)

如果您旋转已翻译的模型,则会发生这种情况。检查您的转换顺序是否正确:

  1. 比例模型;
  2. 旋转模型;
  3. 翻译模型;
  4. 另外,请确保模型本身位于坐标系的原点。