2011-05-09 3 views
5

OpenGL의 데모에서 작업 중이며 fps와 유사한 마우스 모양의 카메라를 구현하려고했습니다. 나는 Max OSX Leopard를 사용하고 있었기 때문에 Carbon을 사용하여 화면 좌표를 얻었고 대부분의 경우 잘 동작하는 이동 후에 화면의 중심으로 마우스를 되돌려 놓아야했습니다. 다음은 내 마우스 방식과 관련 코드는 다음과 같습니다Mac OSX에서 OpenGL에서 작동하는 마우스 모양의 카메라를 얻으려고 시도합니다.

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); 

내가 탄소에 대해 거의 알고 답을 찾기 위해 미친처럼 검색되었지만 :

내가 모든 것을 초기화하는 함수 내에서 커서를 중앙에 다른 전화를 가지고, 다음과 같이 아무 소용이 없습니다. 이 점프를 피하기 위해 제가해야 할 일이 있습니까?

답변

3

CoreGraphics는 Carbon API가 아니므로 잘못된 장소를 찾고있을 가능성이 있습니다. CGAssociateMouseAndMouseCursorPosition을 사용해보세요.

+0

내 초기화 메서드의 시작 부분에'CGAssociateMouseAndMouseCursorPosition (false)'를 넣으려고했는데 아무것도 변경하지 않은 것 같습니다. 나는 CoreGraphics에 대해 많이 알지 못하며 내가 찾고있는 것에 관한 많은 문서가없는 것 같다. –

+0

전혀 신경 쓰지 않고,'CGDisplayMoveCursorToPoint'를 제거하지 못했습니다. 이제 완벽하게 작동합니다. 많은 감사합니다 :) –

관련 문제