子弹物理和 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 将方向转换为前、上和右的主要内容,如果未能解决你的问题,请参考以下文章

游戏制作工作室2:子弹不向鼠标方向移动

Unity游戏设计之飞碟游戏

子弹物理质心和奇怪的物体反应

子弹物理,纹理球体不滚动

如何将欧拉角转换为前、上、右向量

Opengl视点转换如何gluLookAt