我正在编写一个基本的 OpenGL 游戏,并且有一些代码可以在移动相机方面处理鼠标。
我正在使用以下方法:
int windowWidth = 640;
int windowHeight = 480;
int oldMouseX = -1;
int oldMouseY = -1;
void mousePassiveHandler(int x, int y)
{
int snapThreshold = 50;
if (oldMouseX != -1 && oldMouseY != -1)
{
cam.yaw((x - oldMouseX)/10.0);
cam.pitch((y - oldMouseY)/10.0);
oldMouseX = x;
oldMouseY = y;
if ((fabs(x - (windowWidth / 2)) > snapThreshold) || (fabs(y - (windowHeight / 2)) > snapThreshold))
{
oldMouseX = windowWidth / 2;
oldMouseY = windowHeight / 2;
glutWarpPointer(windowWidth / 2, windowHeight / 2);
}
}
else
{
oldMouseX = windowWidth / 2;
oldMouseY = windowHeight / 2;
glutWarpPointer(windowWidth / 2, windowHeight / 2);
}
glutPostRedisplay();
}
然而,环顾四周后,您会发现相机开始“滚动”(旋转)。由于我只调用 Pitch 和 Yaw,所以我不明白这是怎么可能的。
这是我用于 Camera 类的代码:http://pastebin.com/m20d2b01e http://pastebin.com/m20d2b01e
据我所知,我的相机“滚动”不应该发生。它应该简单地上下倾斜或左右偏转。不滚动。
可能是什么原因造成的?
恭喜——您发现了李群理论!
是的,这是可能的。一系列转变的结果
取决于它们的执行顺序。进行推介
随后进行偏航与进行偏航,随后进行不同
一个音高。事实上,在无穷小的偏航极限下
和俯仰,差异相当于纯滚动;一般
情况稍微复杂一些。
(物理学家称之为“交换关系
轮换小组”。)
如果你熟悉旋转矩阵,你可以算出来
很容易。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)