Вращение 3D объекта мышью OpenGL

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

  • Перемещение мыши по Y влияет только на вращение объекта вокруг оси OX
  • Перемещение мыши по X влияет на вращение объекта вокруг осей OY и OZ в зависимости от угла по вертикали(оси OY)
    if (glfwGetMouseButton(window, GLFW_MOUSE_BUTTON_LEFT) == GLFW_PRESS)
    {
        horizontalAngle += mouseSpeed * float(width / 2 - xPosition);
        verticalAngle += mouseSpeed * float(height / 2 - yPosition);
    }
    
    temp = glm::rotate(
        temp,
        glm::radians(verticalAngle),
        glm::vec3(-1, 0, 0)
    );

    temp = glm::rotate(
        temp,
        glm::radians(horizontalAngle),
        glm::vec3(
            0,
            -cos(glm::radians(verticalAngle)),
            -sin(glm::radians(verticalAngle))
        ));

Возможно ли реализовать такой вариант, как например в САПР, чтобы перемещение мыши в каждом направлении вызывало вращение по двум осям.

Был такой вариант, но он работает неправильно

if (glfwGetMouseButton(window, GLFW_MOUSE_BUTTON_LEFT) == GLFW_PRESS)
    {
        horizontalAngle += mouseSpeed * float(width / 2 - xPosition);
        verticalAngle += mouseSpeed * float(height / 2 - yPosition);
    }

    temp = glm::rotate(
        temp,
        glm::radians(verticalAngle),
        glm::vec3(
            -cos(glm::radians(horizontalAngle)),
            0,
            -sin(glm::radians(horizontalAngle))
    ));

    temp = glm::rotate(
            temp,
            glm::radians(horizontalAngle),
            glm::vec3(
                0,
                -cos(glm::radians(verticalAngle)),
                -sin(glm::radians(verticalAngle))
            ));


Ответы (0 шт):