Попытка заставить камеру с мышью работать в OpenGL на Mac OSX - PullRequest
5 голосов
/ 09 мая 2011

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

1 Ответ

3 голосов
/ 09 мая 2011

CoreGraphics не является Carbon API, поэтому есть большая вероятность, что вы ищете не в том месте. Попробуйте использовать CGAssociateMouseAndMouseCursorPosition.

...