我发现倾斜一个对象(23.4度)会使局部或对象空间改变相同的角度。以下代码出现在渲染循环之前。
model[1] = glm::mat4(1.0f);
...
spheres[1].m_currentPosition = glm::vec3(65.0f, 0.0f, -60.0f);
...
model[1] = glm::translate(model[1], spheres[1].m_currentPosition);
model[1] = glm::rotate(model[1], glm::radians(-23.4f), glm::normalize(glm::vec3(0.0f, 0.0f, 1.0f)));
在渲染循环中,除了定期轮换我在渲染循环之前指定的内容外,我几乎没有其他代码,
rotationAxis[1] = glm::normalize(glm::vec3(0.0f, 1.0f, 0.0f));
线在世界坐标(0,0,0)处相遇的地方。
===
如果我颠倒了前两行,即
model[1] = glm::rotate(model[1], glm::radians(-23.4f), glm::normalize(glm::vec3(0.0f, 0.0f, 1.0f)));
model[1] = glm::translate(model[1], spheres[1].m_currentPosition);
===
在渲染循环中,我可以围绕指定的rotationAxis[1]
旋转球体,尽管在两种情况下旋转都是围绕23.4度倾斜轴穿过球体的蓝色顶部和底部。
在这两种情况下,球体(x,y,z)位置的其他所有更改都围绕着现在倾斜的参照系。
我想要的是球体通过计算新的(x,y,z)坐标,然后通过与先前(x,y,z)坐标的差进行平移,从而在水平线的平面中“绕轨道”运动。这种倾斜将导致我不得不调整那些坐标以进行倾斜。尽管这几乎是不可能的,但我正在寻找一个更简单的解决方案,并且更好地了解正在发生的事情。
我已经了解了OpenGL中平移和旋转的顺序,尽管更改顺序并不能解决我的问题。