Opengl 使用鼠标旋转对象 (C++)
Opengl rotate an object using the mouse (C++)
我有一个对象,我想在 Opengl 中使用鼠标旋转它(我正在使用 glut)。我正在跟踪鼠标移动并根据鼠标 x 和 y 的变化进行旋转。但问题是物体没有按照我想要的方式移动。例如,当我在 x 中移动,然后在 y 中移动,然后再次在 x 中移动时,对象似乎沿对角线移动,而我希望它从左向右移动。我知道这是因为较新的旋转在较旧的旋转之前完成(导致不直观的旋转),因为矩阵乘法的工作原理。
但我不知道如何解决这个问题。我想到的一种方法是根据当前旋转更改我旋转的轴,但我不知道这是否会产生正确的结果。我想到的另一件事是确保最新的旋转最后完成(但在 glulookat 翻译场景之前),但我不知道该怎么做。
那么解决这个问题的最佳方法是什么?
您可以采用两种主要方法。
通过将鼠标坐标投影到球体上(弧球方法)来使用四元数。将球体设为 window 的大小,这样您就不必担心单击对象。
绕 y 轴旋转鼠标水平移动。然后,对于垂直鼠标移动,围绕视图向量和 y 的叉积旋转(如果叉积为零,请小心)。这是 Maya 和其他人用于定向编辑视图的方法。
我有一个对象,我想在 Opengl 中使用鼠标旋转它(我正在使用 glut)。我正在跟踪鼠标移动并根据鼠标 x 和 y 的变化进行旋转。但问题是物体没有按照我想要的方式移动。例如,当我在 x 中移动,然后在 y 中移动,然后再次在 x 中移动时,对象似乎沿对角线移动,而我希望它从左向右移动。我知道这是因为较新的旋转在较旧的旋转之前完成(导致不直观的旋转),因为矩阵乘法的工作原理。
但我不知道如何解决这个问题。我想到的一种方法是根据当前旋转更改我旋转的轴,但我不知道这是否会产生正确的结果。我想到的另一件事是确保最新的旋转最后完成(但在 glulookat 翻译场景之前),但我不知道该怎么做。 那么解决这个问题的最佳方法是什么?
您可以采用两种主要方法。
通过将鼠标坐标投影到球体上(弧球方法)来使用四元数。将球体设为 window 的大小,这样您就不必担心单击对象。
绕 y 轴旋转鼠标水平移动。然后,对于垂直鼠标移动,围绕视图向量和 y 的叉积旋转(如果叉积为零,请小心)。这是 Maya 和其他人用于定向编辑视图的方法。