2011-05-09 31 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

相关问题