QAngle

来自Valve Developer Community
跳转至: 导航搜索
English (en)Deutsch (de)中文 (zh)
编辑

本页面由大康翻译于2024年5月4日 (UTC+8)。欢迎任何人补充新内容或者修改其中的错误。


QAngle 是在Source中的一个C++类,表示遵循右手定则的三维外部Tait-Bryan旋转,偏移自基准Z轴。每个QAngle包含三个vec_t旋转数值:

X

X 俯仰角 +向下/-向上

Y

Y 偏航角 +向左/-向右

Z

Z 滚转角 +向右/-向左

(-45,10,0) 意味着向上45°,向左10°,滚转角为0°。

Tip.png提示:这些轴有时被称为rX、rY和rZ,以区别于向量轴。
Note.png注意:在玩家视角中,Z轴被限制在±50。

声明

QAngle angMyAngle = QAngle(-45,10,0);
  • 也可以分别给X、Y和Z成员变量赋值。
  • 前缀ang(有时只需a)标识变量为角度。

方向

要了解QAngle([X], [Y], [Z])是如何工作的,可以想象一个第一人称视角:

  • 向下或向上对应于正或负的[X]
  • 向左或向右对应于正或负的[Y]
  • 侧头使右或左耳朝向地面对应于正或负的[Z]

将这些回归到向量和坐标:[X]、[Y]和[Z]的值分别对应于绕绝对轴[证实] y、z和x进行顺时针旋转(以度为单位)。

“顺时针旋转”假定观察者位于原点,朝向所述轴的正方向。

命名约定

不同的领域使用不同的命名约定来描述这些角度。为了消除任何冲突的术语,以下提供了简要的解释。Source引擎似乎从航空航天工程中吸取了其术语。

航空航天工程

在想象一架飞机时,俯仰角使机头上下移动,偏航角使机头左右移动,滚转角使一侧机翼上升,另一侧机翼下降。在航空航天工程中, 这个系统也被称为欧拉角,如果 — 不像 QAngles — 轴随之旋转。参见“数学”以获得澄清。

数学

严格来说,QAngles将被定义为外部Tait-Bryan旋转,遵循右手定则。然而,有时会交替使用“Tait-Bryan角”和“欧拉角”这两个术语。将这个名字分解成易于理解的部分:
  • 内部和外部旋转之间的区别在于,前者中,每个旋转都会将轴随之移动
  • 适当的欧拉角和Tait-Bryan角之间的区别在于,前者围绕一个轴旋转两次,围绕另一个轴旋转一次(交替),而后者围绕所有三个轴旋转一次
  • 右手定则规定,如果右手的拇指指向一个轴的正方向,其余手指将顺着该轴的正方向卷曲
Tip.png提示:由于旋转中使用了许多相互冲突的定义,当涉及到命名时,明确表示可以避免混淆

从向量转换

由于没有特定的角度键字段,在Hammer中选择的角度将作为一个vector到达。它的坐标表示旋转的度数,而不是坐标,因此必须在使用之前修复:

QAngle angMyAngle = QAngle(vecFromHammer.x, vecFromHammer.y, vecFromHammer.z);

// 如果需要,可以将其转换回向量
AngleVectors(angMyAngle, &vecFromHammer);

存在

另见