Использование библиотеки glm
для расчетов. У меня есть сетка, расположенная в локальной системе координат, где оси:
meshUp = glm::vec3(0, 1, 0);
meshForward = glm::vec3(0, 0, -1);
meshRight = glm::vec3(1, 0, 0);
и мне нужна матрица, которая будет вращать свои вершины в любую другую новую систему координат с 3 заданными осями, fx:
newUp = glm::vec3(-0.85, 0.51, -0.08);
newForward = glm::vec3(0.45, 0.65, -0.61);
newRight = glm::vec3(-0.26, -0.56, -0.79);
Перевод не требуется, системы координат имеют общее происхождение. Я могу пройти половину пути, например:
glm::vec3 rotationVecForUpAxis = glm::normalize(glm::cross(meshUp, newUp));
float rotationRadiansForUpAxis = acos(glm::dot(meshUp, newUp));
glm::mat4 rotationMatrix = glm::rotate(glm::mat4(),
rotationRadiansForUpAxis,
rotationVecForUpAxis);
Это работает и вращает сетку так, чтобы ее ось вверх совпадала с осью newUp
. Однако меш по-прежнему необходимо вращать вокруг оси newUp
, прежде чем ось meshForward
меша совместится с осью newForward
.
Кто-нибудь знает как это сделать?