Я работал над демонстрацией в 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, и искал как сумасшедший, чтобы найти ответ, но безрезультатно.Что-нибудь еще, что я должен сделать, чтобы избежать этого прыжка?