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

Math 如何从轴角度旋转计算方向向量?,math,graphics,rotation,game-engine,Math,Graphics,Rotation,Game Engine,我在渲染引擎中使用带有轴角度符号的vec4来表示演员的旋转。前3个分量(x、y、z)表示(标准化的)旋转轴,最后一个分量(w)表示我们围绕该轴旋转的角度(弧度) 比如说, 轴(0,1,0)和角度为0时,向上为(0,1,0),向前为(0,0,-1) 对于轴(0,0,1)和角度180,向上是(0,0,1),向前是(0,-1,0) 我当前的解决方案(不起作用)如下所示: // glm::vec4 Movable::getOrientation(); // glm::vec3 FORWARD(0.0

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

比如说,

  • 轴(0,1,0)和角度为0时,向上为(0,1,0),向前为(0,0,-1)
  • 对于轴(0,0,1)和角度180,向上是(0,0,1),向前是(0,-1,0)
我当前的解决方案(不起作用)如下所示:

// 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函数。

关于轴角度,需要记住的一点是,“向上”对于角度为0的所有旋转都应该是相同的,因为无论轴指向哪个方向,它都不表示旋转。。。你不能只说向上是在轴的方向上。计算正向和向上的正确方法是从表示它们的两个向量开始,例如(1,0,0)表示正向和(0,1,0)表示向上,然后对这两个向量应用旋转以获得新的正向和向上。

我刚刚用我当前的实现更新了我的帖子。我以为我通过旋转一个全局前向向量来考虑你的建议,但是我没有得到正确的结果。你需要对一个全局上向向量做同样的事情。为什么这是必要的?旋转轴不是一回事吗?不,旋转轴不能向上。假设对象以向上作为y轴开始。以旋转角ε(非常小)围绕z轴旋转将使“向上”矢量位移少量(数量级ε)。但是z轴和y轴相距很远。换句话说,你的方案会在角度0附近引入大量奇怪的不连续性。我不确定我是否遵循。我应该能够毫无困难地围绕上方向向量旋转。事实上,这是我的错误代码似乎能够正常工作的唯一用例。