使用GLM确定四元数前面的位置?

时间:2013-02-25 09:18:47

标签: c++ visual-c++ quaternions glm-math

有没有办法计算四元数(XYZW)旋转前的XYZ位置,最好是使用GLM

我知道Quat旋转和我想要计算前面位置的物体的位置。

我知道如何计算旋转矩阵前面的位置,其中你有一个前向量,向上向量和向右向量,但在这种情况下我只有XYZW值(其中W总是0,我从来没有看到它是becomming 1 ..?)

非常简短: 我拥有的数据:Quat (X Y Z W)Position(X Y Z),我想计算PositionInFront(Position, Quat, Distance, &X, &Y, &Z)

如何实现这一目标?

我尝试了一个强制转换为3x3矩阵并执行Up,Right,Front(因为3x3矩阵转换是这些值,对吗?)计算但它们没有返回正确的位置。

或者是否可以确定物体Z角? (仅绕世界Z /高度轴旋转)

1 个答案:

答案 0 :(得分:0)

似乎车辆中还有2个四元数结构我忘记使用了。这3个是Front,Right,Up计算公式所需的全套:

    float offX = 10.0f;
    float offY = 0.0f;
    float offZ = 0.0f;

    float x = offX * info.Rotation.Front.x + offY * info.Rotation.Right.x + offZ * info.Rotation.Up.x + info.Pos.x;
    float y = offX * info.Rotation.Front.y + offY * info.Rotation.Right.y + offZ * info.Rotation.Up.y + info.Pos.y;
    float z = offX * info.Rotation.Front.z + offY * info.Rotation.Right.z + offZ * info.Rotation.Up.z + info.Pos.z;

    float Angle = (atan2(x-info.Pos.x, y-info.Pos.y) * 180.0f / PI);