子弹物理和 OpenGL 将方向转换为前、上和右
Posted
技术标签:
【中文标题】子弹物理和 OpenGL 将方向转换为前、上和右【英文标题】:Bullet physics and OpenGL convert Orientation to Front, Up and Right 【发布时间】:2021-01-01 19:48:56 【问题描述】:我正在使用子弹物理和 OpenGL 创建一个 3D 太空射击游戏。我在将一些从子弹刚体检索到的四元数转换为前、右和上向量时遇到了一些麻烦。我设法按如下方式检索了 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 ;
但我无法检索向上或右侧。关于如何做到这一点的任何想法?
【问题讨论】:
glm(广义线性模型)!= glm-math(GLM - OpenGL 数学) 【参考方案1】:在计算前向量时,您将方向应用于 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 将方向转换为前、上和右的主要内容,如果未能解决你的问题,请参考以下文章