使用 glm
库进行计算。我有一个在本地坐标系中的网格,轴线如下:
meshUp = glm::vec3(0, 1, 0);
meshForward = glm::vec3(0, 0, -1);
meshRight = glm::vec3(1, 0, 0);
我需要一个矩阵,可以将其顶点旋转到任何具有3个给定轴的新坐标系中,例如:
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
轴对齐。但是,在网格的meshForward
轴与newForward
轴对齐之前,仍需要围绕newUp
轴旋转网格。
有人知道如何做到这一点吗?