Bullet Physics 和 OpenGL 将方向转换为 Front、Up 和 Right

问题描述

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...