试图让Mac OSX上的OpenGL中的鼠标外观相机工作

时间:2011-05-09 00:24:58

标签: c macos opengl macos-carbon

我一直在使用OpenGL进行演示,我一直在尝试实现类似fps的鼠标外观相机。我一直在使用Max OSX Leopard,所以我不得不使用Carbon来获取屏幕坐标并在移动后将鼠标返回到屏幕的中心,这在大多数情况下都可以正常工作。以下是我鼠标方法的相关代码:

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

我知道很少的碳,并一直在寻找像疯了一样找到答案,但无济于事。还有什么我应该做的,以避免这种跳跃?

1 个答案:

答案 0 :(得分:3)

CoreGraphics不是Carbon API,所以你很有可能在错误的地方找工作。尝试使用CGAssociateMouseAndMouseCursorPosition