OpenGL-对象轴方向; glm :: translate和glm :: rotate的顺序

时间:2019-07-14 13:55:24

标签: c++ opengl glm-math

我发现倾斜一个对象(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));

这将导致围绕倾斜23.4度的轴旋转,下图为静态屏幕截图:

线在世界坐标(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);

结果是, enter image description here

===

在渲染循环中,我可以围绕指定的rotationAxis[1]旋转球体,尽管在两种情况下旋转都是围绕23.4度倾斜轴穿过球体的蓝色顶部和底部。

在这两种情况下,球体(x,y,z)位置的其他所有更改都围绕着现在倾斜的参照系。

我想要的是球体通过计算新的(x,y,z)坐标,然后通过与先前(x,y,z)坐标的差进行平移,从而在水平线的平面中“绕轨道”运动。这种倾斜将导致我不得不调整那些坐标以进行倾斜。尽管这几乎是不可能的,但我正在寻找一个更简单的解决方案,并且更好地了解正在发生的事情。

我已经了解了OpenGL中平移和旋转的顺序,尽管更改顺序并不能解决我的问题。

0 个答案:

没有答案