Может кто-нибудь объяснить, как я могу использовать Quanternions, чтобы использовать мышь, чтобы выглядеть как FPS?

Вчера я спросил:Как простой вызов Pitch and Yaw может заставить камеру вращаться?

По сути, из-за «Gimbal Lock» я узнал, что, если вы наклонитесь и покачнете, вы неизбежно получите эффект переката. Для получения дополнительной информации вы можете прочитать этот вопрос.

Я пытаюсь остановить это. Когда вы смотрите в обычном FPS-шутере, ваша камера не катится повсюду!

Вот мой текущий пассивный функционал мыши:

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();

}

Что заставляет камеру наклоняться / рыскать в зависимости от движения мыши (удерживая курсор в центре). Я также разместил свой оригинальный класс камерыВот.

Кто-то из этой ветки предложил мне использовать Quaternions, чтобы предотвратить этот эффект, но после прочтениястраница википедии на них я просто не лажу их.

Как я мог создать Quaternions в своем приложении OpenGL / Glut, чтобы я мог правильно смотреть вокруг своей «Камеры» без нежелательного поворота?

Ответы на вопрос(4)

Ваш ответ на вопрос