Opengl使用鼠标旋转对象(C ++)

时间:2015-01-23 17:50:25

标签: c++ opengl rotation mouse glut

我有一个对象,我想在Opengl中使用鼠标旋转(我正在使用过剩)。我正在跟踪鼠标移动并根据鼠标的x和y的变化进行旋转。但问题是对象不会按我想要的方式移动。例如,当我在x中移动然后在y中移动然后再次移动x时,对象似乎沿对角线移动,而我希望它从左向右移动。我知道这是因为较新的旋转在较旧的旋转之前完成(导致不直观的旋转),因为矩阵乘法如何工作。

但我不知道如何解决这个问题。我想到的一种方法是改变我根据当前旋转旋转的轴,但我不知道这是否会产生正确的结果。我想到的另一件事是确保最后的旋转最后完成(但在glulookat翻译场景之前),但我不知道如何做到这一点。 那么解决这个问题的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

您可以采取两种主要方法。

  • 通过将鼠标坐标投影到球体上来使用四元数(弧形方法)。使球体成为窗口的大小,因此您不必担心单击对象。

  • 围绕y旋转以进行水平鼠标移动。然后,对于垂直鼠标移动,围绕视图矢量和y的叉积旋转(如果叉积为零,请小心)。这是Maya和其他人用于定向编辑视图的方法。