lguém pode explicar como eu posso usar Quanternions para usar o mouse para parecer um FP

ntem perguntei:Como simplesmente chamar Pitch e Yaw faz a câmera rolar?

Basicamente, descobri por causa do "Gimbal Lock" que se você lançar + guinada, inevitavelmente produzirá um efeito de rolagem. Para mais informações, você pode ler essa pergunt

Estou tentando impedir que isso aconteça. Quando você olha em volta em um jogo de tiro em primeira pessoa normal, sua câmera não está rolando por todos os lados!

Aqui está minha atual função passiva do mouse:

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

}

O que faz com que a câmera incline / guinada com base no movimento do mouse (enquanto mantém o cursor no centro). Também publiquei minha classe de câmera originalaqu.

Alguém nesse tópico sugeriu que eu use Quaternions para impedir que esse efeito aconteça, mas depois de ler owikipedia page neles eu simplesmente não groco.

Como posso criar um Quaternions no meu aplicativo OpenGL / Glut para que eu possa fazer com que minha "Câmera" olhe em volta sem rolar indesejado?

questionAnswers(4)

yourAnswerToTheQuestion