Попытка заставить камеру, похожую на мышь, работать в OpenGL на Mac OSX

Я работал над демонстрацией в OpenGL и пытался реализовать fps- нравится камера-мышь. Я использовал Max OSX Leopard, поэтому мне пришлось использовать Carbon, чтобы получить координаты экрана и вернуть мышь в центр экрана после движения, что в большинстве случаев работает нормально. Ниже приведен соответствующий код из моего метода мыши:

CGPoint pnt;
pnt.x = glutGet(GLUT_WINDOW_WIDTH)/2 + glutGet(GLUT_WINDOW_X);
pnt.y = glutGet(GLUT_WINDOW_HEIGHT)/2 + glutGet(GLUT_WINDOW_Y);

int diffX;
int diffY;
CGGetLastMouseDelta(&diffX, &diffY);

if (diffX == 0 && diffY == 0) return;

if ((diffX) > 0)
    angle += (diffX)/5;
else if ((diffX) < 0)
    angle += (diffX)/5;

if ((diffY) > 0 && pitch < 90)
    pitch += (diffY)/5;
else if ((diffY) < 0 && pitch > -70)
    pitch += (diffY)/5;

CGDisplayMoveCursorToPoint(0, pnt);

Проблема досадно проста: при первом вызове CGGetLastMouseDelta, он возвращает разницу между положением мыши до запуска программы и центром окна. Это означает, что при запуске программы камера смотрит в правильную сторону, как и должно быть, но как только я касаюсь мыши, она перескакивает в другое положение.

У меня есть еще один вызов для центрирования курсора внутри функция для инициализации всего, как показано ниже:

CGPoint pnt;
pnt.x = glutGet(GLUT_WINDOW_WIDTH)/2 + glutGet(GLUT_WINDOW_X);
pnt.y = glutGet(GLUT_WINDOW_HEIGHT)/2 + glutGet(GLUT_WINDOW_Y);
CGDisplayMoveCursorToPoint(0, pnt);

Я очень мало знаю о Carbon и искал как сумасшедший, чтобы найти ответ, но безрезультатно. Что еще мне нужно сделать, чтобы избежать этого прыжка?

5
задан Matthew O'Rourke 9 May 2011 в 00:24
поделиться