QAngle

From Valve Developer Community
< Zh
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
English (en)Deutsch (de)中文 (zh)Translate (Translate)

This page was translated by DaKang233 on May 4, 2024 (UTC+8). Anyone is welcome to add new content or fix errors.


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

X

X 俯仰角 +向下/-向上

Y

Y 偏航角 +向左/-向右

Z

Z 滚转角 +向右/-向左

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

Tip.png提示:这些轴有时被称为rX、rY和rZ,以区别于向量(en)轴。
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]的值分别对应于绕绝对轴(en)[证实] y、z和x进行顺时针旋转(以度为单位)。

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

命名约定

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

航空航天工程

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

数学

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

从向量转换

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

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

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

存在

另见