保存鼠标GLFW的位置

时间:2017-02-04 17:57:32

标签: opengl glfw

我有2个glfwSet函数:

glfwSetCursorPosCallback(window, cursor_pos_callback);
glfwSetMouseButtonCallback(window, mouseButtonCallback);

cursor_pos_callback函数:

static void cursor_pos_callback(GLFWwindow* window, double xpos, double ypos) {

    if (mouseButtonLeftDown) {
      cout << "y pos: " << ypos;
      cout << "x pos: " << xpos << endl;
   }
}

mouseButtonCallback函数:

 void mouseButtonCallback(GLFWwindow* _window, int button, int action, int mods)
 {
    switch (button)
    {
       case GLFW_MOUSE_BUTTON_LEFT:
       if (action == GLFW_PRESS)
      {
          cout << "Mouse left input working" << endl; //testing
          mouseButtonLeftDown = true;

       }
      else if (action == GLFW_RELEASE)
     {
         mouseButtonLeftDown = false;
      }
   }
 }

我点击并移动光标后才能输出x和y输出。

我想要完成的所需行为是只需点击我的屏幕即可保存光标的位置。我是以错误的方式去做的吗?

2 个答案:

答案 0 :(得分:1)

仅在移动鼠标时调用Bar,与仅在使用按钮时调用按钮回调的方式相同。这就是为什么只有在按住鼠标左键并移动鼠标时才能获得鼠标的位置。

据我所知,您希望它在您单击时打印出鼠标的位置。要执行此操作,您需要将鼠标cursor_pos_callbackxpos保存在ypos的某些外部变量中,然后在cursor_pos_callback中打印这些外部变量

答案 1 :(得分:0)

您可以使用glfwGetCursorPos()

在回调函数中,它看起来像

void mouseButtonCallback(GLFWwindow* _window, int button, int action, int mods)
 {
    switch (button)
    {
       case GLFW_MOUSE_BUTTON_LEFT:
       if (action == GLFW_PRESS)
      {
        double xposition, yposition;
        glfwGetCursorPos(window, &xposition, &yposition);
        std::cout << xposition << "," << yposition << std::endl;
        cout << "Mouse left input working" << endl; //testing
        mouseButtonLeftDown = true;

     }
     else if (action == GLFW_RELEASE)
     {
        mouseButtonLeftDown = false;
     }
   }
 }