如果按住右键,如何移动/平移OpenGL相机?

时间:2017-08-07 04:01:55

标签: opengl glfw glm-math

我的程序有一个移动鼠标移动时移动/平移的相机。如果按住鼠标右键,如何才能移动/平移?

这是我移动/平移相机的功能。我尝试使用GLFW_MOUSE_BUTTON_RIGHT添加if语句,但它不起作用。

static void cursor_position_callback(GLFWwindow* window, double xpos, double ypos)
{
       if (GLFW_MOUSE_BUTTON_RIGHT && GLFW_PRESS) {
              // variables to store mouse cursor coordinates
              static double previous_xpos = xpos;
              static double previous_ypos = ypos;
              double delta_x = xpos - previous_xpos;
              double delta_y = ypos - previous_ypos;

              // pass mouse movement to camera class
              g_camera.updateYaw(delta_x);
              g_camera.updatePitch(delta_y);

              // update previous mouse coordinates
              previous_xpos = xpos;
              previous_ypos = ypos;
       }
}

不确定这是否重要,但这是我的鼠标回调。我的程序中有一个tweakbar。

static void mouse_button_callback(GLFWwindow* window, int button, int action, int mods)
    {
        // pass mouse data to tweak bar
        TwEventMouseButtonGLFW(button, action);
    }

1 个答案:

答案 0 :(得分:1)

GLFW_MOUSE_BUTTON_RIGHTGLFW_PRESS是使用

定义的宏
#define GLFW_PRESS 1

#define GLFW_MOUSE_BUTTON_RIGHT GLFW_MOUSE_BUTTON_2

#define GLFW_MOUSE_BUTTON_2   1

在编译器的预处理步骤之后,if (GLFW_MOUSE_BUTTON_RIGHT && GLFW_PRESS) {if( 1 && 1 ) {

您需要在鼠标按钮回调中存储鼠标按钮的当前状态,或使用glfwGetMouseButton查询状态:

if ( glfwGetMouseButton(window, GLFW_MOUSE_BUTTON_RIGHT) ==  GLFW_PRESS) {