当前位置: 首页 > 知识库问答 >
问题:

GLFW相机和鼠标控制

易刚捷
2023-03-14

因此,我基本上是从以下教程学习OpenGL和GLFW库:http://www.opengl-tutorial.org/beginners-tutorials/tutorial-6-keyboard-and-mouse/

void window_focus_callback(GLFWwindow* window, int focused){
if (focused)
{
    //center mouse on screen
    int width, height;
    glfwGetWindowSize(window, &width, &height);
    glfwSetCursorPos(window, 1024 / 2, 768 / 2);
    windowFocused = true;
}
else
{
    windowFocused = false;
}

在主应用程序循环中:

if(windowFocused) computeMatricesFromInputs();

但出于某种原因,这种解决方案行不通。有什么方法可以用GLFW解决这个问题吗?

共有1个答案

庄浩言
2023-03-14

问题有点老了,但我最近也遇到了类似的问题。所以只是分享,更多的解决方案存在。我使用glfw_cursor_disabled。在此模式下,当您收到'ON'焦点事件时,鼠标位置(尚未)更新,因此调用GetCursorPos将传递以前的值。新的光标位置在“on”焦点事件之后到达MouseMove回调。我通过跟踪焦点的恢复来解决这个问题,并使用这个int he OnMouseMove回调来分派一个MouseInit(以捕捉光标)或一个普通的mousemove。

通过这种方式,我可以在窗口外进行Alt+Tab操作,并在其他地方返回光标,而不会让相机发生令人讨厌的跳跃/旋转。

void InputManagerGLFW::Callback_OnMouseMove(
            GLFWwindow* window,
            double      xpos,               //
            double      ypos)               //
{
    if (!mFocusRegained)
    {
        mMouseBuffer.Move(xpos, ypos);
    }
    else
    {
        mFocusRegained = false;
        mMouseBuffer.Init(xpos, ypos);
    }
}

void InputManagerGLFW::Callback_OnFocus(
            GLFWwindow* window,
            int         focused)
{
    if (focused)
    {
        // The window gained input focus
        // Note: the mouse position is not yet updated
        //       the new position is provided by the mousemove callback AFTER this callback
        Log::Info("focus");

        // use flag to indicate the OnMouseMove that we just regained focus,
        // so the first mouse move must be handled differently
        mFocusRegained = true;

        // this will NOT work!!!
        // double x,y;
        // glfwGetCursorPos(window,&x,&y);
        // mMouseBuffer.Init(x,y);
    }
    else
    {
        // The window lost input focus
        Log::Info("focus lost");
    }
}
 类似资料:
  • 问题内容: 在Windows下如何控制Python中的鼠标光标,即将其移动到特定位置并单击? 问题答案: 在安装pywin32(在我的情况下为 )后,在WinXP上进行了Python 2.6(也已测试3.x)测试:

  • 我正在用LWJGL开发一个3D游戏,我想添加一个支持鼠标的第一人称相机。我现在有一个,但它并不顺利,一点也不好用。我真的希望窗口也能聚焦,这样鼠标就可以启动,而不是在窗口上悬停。我如何实现这一点? 以下是我当前的摄像头实现:

  • 问题内容: 如何在Python中控制鼠标和键盘? 这个想法与Java中的Robot()类相同。可以说:将鼠标从此处移至此处,单击此处,然后将其写在屏幕上。 对于Windows,有win32api,但我主要使用Linux。 对于Linux,有Xlib,但它也适用于键盘吗?(仅找到对鼠标的引用) 有跨平台的解决方案吗?(Linux,Windows甚至OS X都很棒。) 问题答案: 对于鼠标,我发现py

  • 我正在使用GLFW在c中创建一个OpenGL应用程序。基于本教程,我成功地创建了类似FPS的摄影机(WASD移动-鼠标移动-俯仰-偏航)。 我使用的相机鼠标移动 这很好,但问题是我的应用程序窗口不是全屏的,所以如果我想旋转鼠标光标,它就会离开窗口,很难控制相机。 是否可以做与glfwSetCursorPosCallback相同的事情,但仅当按下左键时?我希望相机做与现在相同的事情,但仅当我按下左键

  • 提前谢了。

  • 使用鼠标库,您可以使用Arduino Leonardo,Micro或Due控制计算机的屏幕光标。 此特定示例使用五个按钮移动屏幕上的光标。 其中四个按钮是方向性的(向上,向下,向左,向右),一个用于鼠标左键单击。 Arduino的光标移动始终是相对的。 每次读取输入时,光标的位置都会相对于其当前位置进行更新。 每当按下一个方向按钮时,Arduino将移动鼠标,将HIGH输入映射到适当方向的5的范围