Как повернуть камеру в openGL с помощью GLFW? - PullRequest
1 голос
/ 24 марта 2019

Я создаю приложение OpenGL на c ++, используя GLFW.Основываясь на этом руководстве, мне удалось создать FPS-подобную камеру (движение WASD + поворот-рыскание с движением мыши).

Для перемещения мыши в камере я использую

glfwSetCursorPosCallback(window, mouse_callback);
void mouse_callback(GLFWwindow* window, double xpos, double ypos)
{
    if (firstMouse)
    {
        lastX = xpos;
        lastY = ypos;
        firstMouse = false;
    }

    float xoffset = xpos - lastX;
    float yoffset = lastY - ypos; 
    lastX = xpos;
    lastY = ypos;

    float sensitivity = 0.1f;
    xoffset *= sensitivity;
    yoffset *= sensitivity;

    yaw += xoffset;
    pitch += yoffset;

    if (pitch > 89.0f)
        pitch = 89.0f;
    if (pitch < -89.0f)
        pitch = -89.0f;

    glm::vec3 front;
    front.x = cos(glm::radians(yaw)) * cos(glm::radians(pitch));
    front.y = sin(glm::radians(pitch));
    front.z = sin(glm::radians(yaw)) * cos(glm::radians(pitch));
    cameraFront = glm::normalize(front);
}

Это работает нормально, но проблема в том, что окно моего приложения не полноэкранное, поэтому, если я хочу повернуть, курсор мыши выходит из окна, а затем трудно управлять камерой.

Можно ли сделать то же самое, что и glfwSetCursorPosCallback, но только при нажатии левой кнопки мыши?Я хочу, чтобы камера делала то же самое, что и сейчас, но только если я нажал левой кнопкой мыши.

1 Ответ

2 голосов
/ 24 марта 2019

Можно ли сделать то же самое, что и glfwSetCursorPosCallback, но только при нажатии левой кнопки мыши?Я хочу, чтобы камера делала то же самое, что и сейчас, но только если я нажал левую кнопку мыши.

glfwSetMouseButtonCallback устанавливает обратный вызов, который уведомляется при нажатии кнопки мыши
Текущую позицию мыши (курсора) можно получить с помощью glfwGetCursorPos.

Добавить функцию обратного вызова кнопки мыши:

glfwSetMouseButtonCallback(window, mouse_button_callback);

И получитьположение мыши в обратном вызове:

void mouse_button_callback(GLFWwindow* window, int button, int action, int mods)
{
    if (button == GLFW_MOUSE_BUTTON_LEFT && action == GLFW_PRESS)
    {
        double xpos, ypos;     
        glfwGetCursorPos(window, &xpos, &ypos); 

        // [...]
    }
}
...