私は基本的な 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();
}
ただし、ぐるりと見回すと、カメラが「回転」(回転) し始めることがわかります。ピッチとヨーのみを呼び出しているため、これがどのように可能かわかりません。
Camera クラスに使用しているコードは次のとおりです: http://pastebin.com/m20d2b01e
私の知る限り、カメラの「ローリング」は発生しないはずです。上下にピッチングするか、左右にヨーイングするだけです。ロールしないでください。
何が原因でしょうか?