He estado trabajando en una demostración en OpenGL y he estado tratando de implementar una cámara de aspecto de ratón similar a un fps. He estado usando Max OSX Leopard, así que he tenido que usar Carbon para obtener las coordenadas de la pantalla y devolver el mouse al centro de la pantalla después del movimiento, que funciona bien la mayor parte del tiempo. A continuación se muestra el código relacionado de mi método de ratón:Intentando obtener una cámara con aspecto de ratón que funcione en OpenGL en Mac OSX
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);
El problema es molesto simple: La primera vez que se llama CGGetLastMouseDelta, devuelve la diferencia entre la posición del ratón antes de que el programa se inició y el centro de la ventana. Esto significa que cuando el programa comienza, la cámara está mirando hacia la derecha como debería ser, pero tan pronto como toco el mouse, salta a una posición diferente.
Tengo otra llamada para centrar el cursor dentro de una función para inicializar todo, se muestra a continuación:
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);
sé muy poco acerca de carbono, y han estado buscando como locos para encontrar una respuesta, pero en vano. ¿Hay algo más que deba hacer para evitar este salto?
He intentado poner 'CGAssociateMouseAndMouseCursorPosition (false)' al comienzo de mi método de inicialización, no parece cambiar nada. Realmente no sé mucho sobre CoreGraphics, y no parece haber mucha documentación relacionada con lo que estoy buscando. –
No importa, no me deshice de 'CGDisplayMoveCursorToPoint', ahora funciona perfectamente, muchas gracias :) –