简单地调用 Pitch() 和 Yaw() 怎么会导致相机最终 Roll() 呢?

2024-01-12

我正在编写一个基本的 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(使用前将#替换为@)

简单地调用 Pitch() 和 Yaw() 怎么会导致相机最终 Roll() 呢? 的相关文章

随机推荐