0

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

我知道 Quat 旋转和我想计算前面位置的对象的位置。

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

简而言之:我拥有的数据:Quat (X Y Z W)并且Position(X Y Z)我想计算PositionInFront(Position, Quat, Distance, &X, &Y, &Z)

如何实现这个目标?

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

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

4

1 回答 1

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);
于 2013-02-25T14:35:32.573 回答