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