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

标签 c++ opengl rotation mouse glut

我有一个我想在 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/

相关文章:

opengl - 在两个模型 View 矩阵之间进行插值

c# - tao SimpleOpenGlControl 出错

CSS3 旋转翻转卡片 - 闪烁?

python - Pygame:如何旋转表面积而不使图像闪烁两次?

c++ - 组合多个类模板特化

c++ - 最大子数组和 C++

c++ - 为什么我不能使用 _mm_sin_pd?

c++ - 只有一种 Material 应用于多个对象

javascript - 三个js对象3D旋转

c++ - 模板类的实例化点