【问题标题】:Trying to get a mouse-look camera working in OpenGL on Mac OSX试图让鼠标外观的相机在 Mac OSX 上的 OpenGL 中工作
【发布时间】:2011-05-09 00:24:58
【问题描述】:

我一直在 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);

我对 Carbon 知之甚少,一直在疯狂寻找答案,但无济于事。我还应该做些什么来避免这种跳跃?

【问题讨论】:

    标签: c macos opengl macos-carbon


    【解决方案1】:

    CoreGraphics 不是 Carbon API,因此您很有可能找错地方了。尝试使用CGAssociateMouseAndMouseCursorPosition

    【讨论】:

    • 我尝试将CGAssociateMouseAndMouseCursorPosition(false) 放在初始化方法的开头,它似乎没有改变任何东西。我对 CoreGraphics 也不太了解,而且似乎没有太多与我要查找的内容相关的文档。
    • 没关系,我没有删除CGDisplayMoveCursorToPoint,现在可以完美运行,非常感谢:)
    猜你喜欢
    • 2011-10-04
    • 2017-01-23
    • 1970-01-01
    • 2015-08-31
    • 2012-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-21
    相关资源
    最近更新 更多