如何从轴角旋转计算方向向量?

How to calculate direction vectors from axis-angle rotation?

我在我的渲染引擎中使用带有轴角符号的 vec4 表示演员的旋转。前 3 个分量 (x, y, z) 表示(标准化的)旋转轴,最后一个分量 (w) 表示我们围绕该轴旋转的角度(以弧度为单位)。

例如,

我当前的解决方案(不起作用)如下所示:

// glm::vec4 Movable::getOrientation();
// glm::vec3 FORWARD(0.0f, 0.0f, -1.0f);
glm::vec3 Movable::getForward() {
   return glm::vec3(glm::rotate(
    this->getOrientation().w, glm::vec3(this->getOrientation())) *
    glm::vec4(FORWARD, 1.0f));
}

我已经将向上方向定义为与旋转轴相同,但我无法计算任意轴的前向矢量。最简单的方法是什么?我想尽可能利用 glm 函数。

关于 axis-angle 要记住的一件事是 "up" 对于所有角度为 0 的旋转都意味着相同的事情,因为无论轴指向哪个方向,它都表示没有旋转。 .. 你不能只说向上是在轴的方向上。计算向前和向上的正确方法是从代表它们的两个向量开始,比如 (1,0,0) 表示向前,(0,1,0) 表示向上,然后对这两个向量应用旋转以获得新前锋及以上。