【发布时间】:2015-04-20 17:31:18
【问题描述】:
使用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 轴对齐。
有人知道怎么做吗?
【问题讨论】:
-
您可能对基矩阵的变化感兴趣:math.hmc.edu/calculus/tutorials/changebasis。