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

时间:2015-04-21 00:51:28

标签: math graphics rotation game-engine

我使用带有轴角度表示法的vec4表示渲染引擎中actor的旋转。前三个分量(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功能。

1 个答案:

答案 0 :(得分:1)

关于轴角度要记住的一点是,对于角度为0的所有旋转,“向上”应该意味着相同的事情,因为无论轴指向哪个方向都表示没有旋转...你可以只是说是朝向轴的方向。计算前向和上行的正确方法是从表示它们的两个向量开始,比如说(1,0,0)表示向前,(0,1,0)表示向上,然后将旋转应用于这两个矢量以获得新的前进和上升。