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)
我正在使用子弹物理学和 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)