2011-05-09 8 views
5

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?

Respuesta

3

CoreGraphics no es una API de carbono, por lo que hay muchas posibilidades de que esté buscando en el lugar equivocado. Intenta usar CGAssociateMouseAndMouseCursorPosition.

+0

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. –

+0

No importa, no me deshice de 'CGDisplayMoveCursorToPoint', ahora funciona perfectamente, muchas gracias :) –

Cuestiones relacionadas