在OSX下的GLFW mouselook

我将继续将Visual Studio 2012中的OpenGL应用程序移植到XCode 5。

我遇到的唯一的主要问题是mouselook。 它在OSX(小牛)下“不起作用”。

(伪代码):

预更新,在帧开始时执行:

void Dispatcher::PreUpdate(GameTime &time) { m_currentKeyboardState = m_nextKeyboardState; m_previousMousePosition = m_currentMousePosition; GetMousePosition(m_currentMousePosition); } 

在input处理之后,在更新后执行,在帧的末尾:

 void Dispatcher::PostUpdate(GameTime &time) { m_previousKeyboardState = m_currentKeyboardState; if (m_captureMouse) RecenterMouse(); } 

重置鼠标的方法:

 void Dispatcher::RecenterMouse() { glfwSetCursorPos(m_window, m_windowSize.x / 2.f, m_windowSize.y / 2.f); GetMousePosition(m_currentMousePosition); if (m_previousMousePosition != m_currentMousePosition) cout << "Mouse: " << m_currentMousePosition.x << "," << m_currentMousePosition.y << endl; m_previousMousePosition = m_currentMousePosition; } 

而且,为了完整:

 void Dispatcher::GetMouseMotion(Vector2 &movedBy) { if(m_captureMouse) { movedBy.x = (m_currentMousePosition.x - m_previousMousePosition.x); movedBy.y = (m_currentMousePosition.y - m_previousMousePosition.y); } else { movedBy.x=movedBy.y=0; } } 

如果m_captureMousetrue ,并且m_previousMousePosition != m_currentMousePosition ,则无论我移动鼠标m_previousMousePosition != m_currentMousePosition ,y delta始终为1。 (其实,使用触控板,但应该是indentical。)

这个代码在Win7下完美工作,但是在OSX下永远不会返回任何比(0,1)更多的运动。

建议? 我已经看到关于glfw和osx的其他问题,但没有解决scheme。

编辑

值得注意的是,如果我closures鼠标捕捉(基本上它只是在框架的末尾重新接收鼠标),mouselook可以正常工作,但是当然,光标可以自由地在窗口外漫游,这并不是真的为第一人称的应用程序工作。

这通常通过将GLFW_CURSORGLFW_CURSOR_HIDDEN更改为GLFW_CURSOR_HIDDEN来解决GLFW_CURSOR_DISABLED

行为差异是由于GLFW使用的操作系统API差异,以及它们如何与窗口系统交互。 在文档中 ,它说DISABLED应该用于3D摄像头控制,而HIDDEN应该在渲染自定义光标时使用。