GLFW - glfwSetMousePos Bug on Mac OS X 10.7 with OpenGL came
GLFW - glfwSetMousePos Bug on Mac OS X 10.7 with OpenGL camera
我一直在关注 http://opengl-tutorials.org 的教程,到目前为止它们非常出色(我在Mac上,所以我不得不使用OpenGL 3.2和GLSL 1.50而不是OpenGL 3.3和GLSL 3.30)。到目前为止,教程的唯一问题是,使用 3D 相机教程(教程 6:键盘和鼠标),当我移动鼠标时,我不会得到任何旋转,如果我这样做,它只会缓慢向下;即使我向任何方向移动鼠标。
我已经编译了给定的代码(OpenGL 2.1 和 3.x)并手动编写,这仍然存在此错误。我不知道为什么会发生这种情况。这可能是GLFW,Mac OS X或其他东西的错误吗?
这是一个很老的问题,但我有同样的问题,所以可能会有所帮助。我已经从网站下载了代码,在共同/控件中.cpp这一行被评论了:
glfwSetMousePos(1024/2, 768/2);
显然,MacOS的GLFW中存在一个错误,该指令无法正常工作。希望他们在较新的版本中修复了它,但我还没有测试过它。
附带说明一下,注释此行将使教程正常工作,但是在夹紧垂直相机角度时可能会遇到一些问题:如果将鼠标移动到夹紧点(例如向上),鼠标位置将不断更新,当您向下移动鼠标时,您必须等到它到达夹紧点,然后相机再次移动。
[编辑] 这是完整的修改代码
// Reset mouse position for next frame
// EDIT : Doesn't work on Mac OS, hence the code below is a bit different from the website's
//glfwSetMousePos(1024/2, 768/2);
// Compute new orientation
horizontalAngle = 3.14f + mouseSpeed * float( 1024/2 - xpos );
verticalAngle = mouseSpeed * float( 768/2 - ypos );
正如GLFW3的文档所提到的:
"窗口必须具有输入焦点。"
所以你应该调用glfwSetCursorPos
直到窗口有输入焦点!这不是 MacOS 中 GLFW 中的错误!
代码应如下所示:
bool firstMouse = true;
float centerX = (float)mWidth / 2, centerY = (float)mHeight / 2;
GLFWwindow* mWindow;
void mouse_callback(GLFWwindow *window, double xPos, double yPos) {
if (firstMouse) {
// why here?
// As
// https://www.glfw.org/docs/3.3/group__input.html#ga04b03af936d906ca123c8f4ee08b39e7
// mention :
// "The window must have input focus."
glfwSetCursorPos(mWindow, centerX, centerY);
firstMouse = false;
}
// ...
}
void main() {
// ...
glfwSetCursorPosCallback(mWindow, mouse_callback);
// ...
}
OS X 10.9上的GLFW 3仍然存在同样的问题。
为了禁用光标,从而将其捕获在窗口中,我在创建窗口后添加了它。
glfwSetInputMode(window, GLFW_CURSOR, GLFW_CURSOR_DISABLED);
然后我在控件中注释掉了//glfwSetCursorPos(window, 1024 / 2, 768 / 2);
.cpp
现在鼠标移动工作了。但是,似乎从某个角度查看立方体时,左右移动鼠标时视图会旋转,而从其他角度视图会按预期左右移动。奇怪。
对于 OSX 上的 GLFW2,请在 tutorial-XX 中添加此行.cpp在 glfwCreateWindow( ...,...,) 之后
glfwSetInputMode(window, GLFW_CURSOR, GLFW_CURSOR_DISABLED);
然后在公共/控件中创建两个全局变量.cpp
double xpos_old, ypos_old;
最后注释掉 glfwSetCursorPos(window, 1024/2, 768/2); 并将角度的计算更改为新设置,这个想法是得到旧鼠标和新鼠标之间的区别。最终代码应如下所示:
// Reset mouse position for next frame
// glfwSetCursorPos(window, 1024/2, 768/2);
// Compute new orientation
horizontalAngle += mouseSpeed * float( xpos_old - xpos );
verticalAngle += mouseSpeed * float( ypos_old - ypos );
xpos_old = xpos;
ypos_old = epos;
这在我的Mac上效果很好! 干杯!
- makefile c++ with other h file dependencies with OpenGL
- AR with OpenCV & OpenGL
- Opencv Mat to opengl with OSVR
- OpenGL Texturing with SOIL
- OpenGL and GL_Blend with glDrawElements
- OpenGL 3.0+ with glew C++/CLI
- OpenGL Texture with alpha 和 glColor4f,glColor4f 正在影响纹理
- Qt OpenGL with Widgets:怎么了?
- OpenGL using std::vector with glm::vec3
- OpenGL, DevIL, obj loader with textures
- OpenGL Pointlight Shadowmapping with Cubemaps
- OpenGL HeightMap with vertex shader and QGLShaderProgram
- math_3d.h with opengl
- OpenGL Support with OpenCV-3.0
- OpenGL 3.x .obj loader with ADS Phong "veiny-looking" sphere
- Kinect with OpenGL
- Using Eigen::Vector3f with Opengl ES 2.0 VBO
- Glut32 is missing with OpenGL
- GLFW - glfwSetMousePos Bug on Mac OS X 10.7 with OpenGL came
- SDL with OpenGL start