2011-05-09 53 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知之甚少,似乎並沒有太多有關我正在尋找的文檔。 – 2011-05-09 01:45:59

+0

沒關係,我沒有擺脫'CGDisplayMoveCursorToPoint',這現在完美的作品,非常感謝:) – 2011-05-09 01:54:41

相關問題