Bullet physics 和 OpenGL 将方向转换为前、上和右

Bullet physics and OpenGL convert Orientation to Front, Up and Right

我正在使用子弹物理学和 OpenGL 创建 3D space 射击游戏。我在将从 bullet 刚体检索到的一些四元数转换为 Front、Right 和 Up 向量时遇到了一些麻烦。我已经设法检索 Front 向量,如下所示:

glm::quat Orientation = this->GetOrientation();

glm::quat qF = Orientation * glm::quat(0, 0, 0, 1) * glm::conjugate(Orientation);
Front = { qF.x, qF.y, qF.z };

但是我无法检索到上或右。关于如何做到这一点有什么想法吗?

在计算前向量时,您将方向应用于 z 轴。粗体部分是正在旋转的矢量:

qlm::quat(0, 0, 0, 1)

因此,要找到任何其他向量,如右、左、下或上,您只需旋转正确的轴。尝试将此四元数更改为以下一些,然后选择您需要的:

qlm::quat(0, 1, 0, 0)

qlm::quat(0, 0, 1, 0)

qlm::quat(0, -1, 0, 0)

qlm::quat(0, 0, -​​1, 0)

我的猜测是 y 轴是向上的方向,所以我会先尝试 0, 1, 0

有了上向量后,您还可以使用叉积计算右向量(反之亦然):

right = glm::cross(front, up)