Как перемещать / панорамировать камеру OpenGL, ТОЛЬКО если щелкнуть правой кнопкой мыши?

В моей программе есть камера, которая перемещается/панорамируется при перемещении мыши. Как заставить его двигаться/панорамировать ТОЛЬКО при удерживании правой кнопки мыши?

Это моя функция, которая перемещает/панорамирует камеру. Я попытался добавить оператор if с помощью GLFW_MOUSE_BUTTON_RIGHT, но он не работает.

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;
       }
}

Не уверен, что это тоже имеет значение, но вот мой обратный вызов мыши. В моей программе есть твикбар.

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

person Zolly    schedule 07.08.2017    source источник


Ответы (1)


GLFW_MOUSE_BUTTON_RIGHT и GLFW_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 ) { после этапа предварительной обработки компилятора.

Вам нужно либо сохранить текущее состояние кнопки мыши в обратном вызове mousebutton, либо запросить состояние, используя glfwGetMouseButton:

if ( glfwGetMouseButton(window, GLFW_MOUSE_BUTTON_RIGHT) ==  GLFW_PRESS) {
person t.niese    schedule 07.08.2017
comment
спасибо, это сработало. Однако мой курсор мыши исчез, и я не могу поиграться с панелью настроек. Вы знаете, как заставить его появиться снова? - person Zolly; 07.08.2017
comment
@Zolly, это еще один вопрос. Вы не должны задавать в дальнейшем разные вопросы, в комментариях к вопросу, который не связан с тем. Вероятно, у вас где-то есть glfwSetInputMode(window, GLFW_CURSOR, GLFW_CURSOR_DISABLED);. - person t.niese; 07.08.2017