我正试图通过矩阵在它自己的轴上旋转一个物体,但我遇到了一个问题。在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();
答案 0 :(得分:0)
如果您旋转已翻译的模型,则会发生这种情况。检查您的转换顺序是否正确:
另外,请确保模型本身位于坐标系的原点。