QAngle
< Zh
QAngle 是在Source 中的一个C++类,表示遵循右手定则的三维外部Tait-Bryan旋转,偏移自基准Z轴 。每个QAngle包含三个vec_t 旋转数值:
X
X 俯仰角 +向下/-向上
Y
Y 偏航角 +向左/-向右
Z
Z 滚转角 +向右/-向左
(-45,10,0)
意味着向上45°,向左10°,滚转角为0°。
提示:这些轴有时被称为rX、rY和rZ,以区别于向量 轴。
注意:在玩家视角中,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角”和“欧拉角”这两个术语。将这个名字分解成易于理解的部分:
提示:由于旋转中使用了许多相互冲突的定义,当涉及到命名时,明确表示可以避免混淆
|
从向量转换
由于没有特定的角度键字段,在Hammer中选择的角度将作为一个vector 到达。它的坐标表示旋转的度数,而不是坐标,因此必须在使用之前修复:
QAngle angMyAngle = QAngle(vecFromHammer.x, vecFromHammer.y, vecFromHammer.z);
// 如果需要,可以将其转换回向量
AngleVectors(angMyAngle, &vecFromHammer);