Zh/QAngle: Difference between revisions
< Zh
Jump to navigation
Jump to search
m (-Using L template for links) |
|||
Line 3: | Line 3: | ||
{{toc-right}} | {{toc-right}} | ||
'''QAngle''' 是在 | '''QAngle''' 是在{{L|Source}}中的一个C++类,表示遵循[[Wikipedia: Right-hand rule|右手定则]]的三维[[Wikipedia: Extrinsic rotations|外部Tait-Bryan旋转]],偏移自基准{{L|Coordinates|Z轴}}。每个QAngle包含三个{{L|vec_t}}旋转数值: | ||
== == | == == | ||
=== X === | === X === | ||
Line 14: | Line 14: | ||
<code>(-45,10,0)</code> 意味着向上45°,向左10°,滚转角为0°。 | <code>(-45,10,0)</code> 意味着向上45°,向左10°,滚转角为0°。 | ||
{{tip|这些轴有时被称为rX、rY和rZ,以区别于 | {{tip|这些轴有时被称为rX、rY和rZ,以区别于{{L|vector|向量}}轴。}} | ||
{{note|在玩家视角中,Z轴被限制在±50。}} | {{note|在玩家视角中,Z轴被限制在±50。}} | ||
Line 33: | Line 33: | ||
* 侧头使右或左耳朝向地面对应于正或负的[Z] | * 侧头使右或左耳朝向地面对应于正或负的[Z] | ||
将这些回归到向量和坐标:[X]、[Y]和[Z]的值分别对应于绕 | 将这些回归到向量和坐标:[X]、[Y]和[Z]的值分别对应于绕{{L|Coordinates|绝对轴}}{{confirm}} y、z和x进行顺时针旋转(以度为单位)。 | ||
“顺时针旋转”假定观察者位于原点,朝向所述轴的正方向。 | “顺时针旋转”假定观察者位于原点,朝向所述轴的正方向。 | ||
Line 57: | Line 57: | ||
== 从向量转换 == | == 从向量转换 == | ||
由于没有特定的[[Data Descriptions#DEFINE FIELD|角度键字段]],在Hammer中选择的角度将作为一个 | 由于没有特定的[[Data Descriptions#DEFINE FIELD|角度键字段]],在Hammer中选择的角度将作为一个{{L|vector}}到达。它的坐标表示旋转的度数,而不是坐标,因此必须在使用之前修复: | ||
<source lang=cpp> | <source lang=cpp> | ||
Line 73: | Line 73: | ||
* [[Wikipedia:Yaw, pitch, and roll|偏航、俯仰和横滚]] | * [[Wikipedia:Yaw, pitch, and roll|偏航、俯仰和横滚]] | ||
* | * {{L|getpos}} | ||
* | * {{L|Vector}} 和 {{L|Coordinates}} | ||
* | * {{L|AngleVectors()|<code>AngleVectors()</code> / <code>VectorAngles()</code>}} |
Revision as of 10:00, 11 July 2024
This page was translated by DaKang233 on May 4, 2024 (UTC+8). Anyone is welcome to add new content or fix errors.
QAngle 是在Source 中的一个C++类,表示遵循右手定则的三维外部Tait-Bryan旋转,偏移自基准Z轴 。每个QAngle包含三个vec_t 旋转数值:
X
X 俯仰角 +向下/-向上
Y
Y 偏航角 +向左/-向右
Z
Z 滚转角 +向右/-向左
(-45,10,0)
意味着向上45°,向左10°,滚转角为0°。


声明
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);