Вращение 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))
));