问题描述
我正在使用子弹物理和 OpenGL 来创建 3D 太空射击游戏。我在将从子弹刚体检索到的一些四元数转换为 Front、Right 和 Up 向量时遇到了一些麻烦。我设法按如下方式检索了 Front 向量:
glm::quat Orientation = this->Getorientation();
glm::quat qF = Orientation * glm::quat(0,1) * glm::conjugate(Orientation);
Front = { qF.x,qF.y,qF.z };
但我无法检索 Up 或 Right。关于如何做到这一点的任何想法?
解决方法
在计算前向矢量时,您将方向应用到 z 轴。粗体部分是被旋转的向量:
qlm::quat(0,0,1)
因此,要找到任何其他向量,如右、左、下或上,您只需要旋转正确的轴即可。尝试将此四元数更改为以下一些,并选择您需要的:
qlm::quat(0,1,0)
qlm::quat(0,1,-1,-1,0)
我的猜测是 y 轴是向上的方向,所以我会先尝试 0,0。
获得向上向量后,您还可以使用叉积计算正确的向量(反之亦然):
right = glm::cross(front,up)