Zh/QAngle: Difference between revisions

From Valve Developer Community
< Zh
Jump to navigation Jump to search
mNo edit summary
m (Multipage removal)
 
(2 intermediate revisions by the same user not shown)
Line 1: Line 1:
{{langsp|title=QAngle}}
{{LanguageBar|title = QAngle}}
 
{{:User:1416006136/Signature|time=May 4 2024}}
{{:User:1416006136/Signature|time=May 4 2024}}
{{toc-right}}
{{toc-right}}


'''QAngle''' 是在[[Source]]中的一个C++类,表示遵循[[Wikipedia: Right-hand rule|右手定则]]的三维[[Wikipedia: Extrinsic rotations|外部Tait-Bryan旋转]],偏移自基准[[Coordinates|Z轴]]。每个QAngle包含三个[[vec_t]]旋转数值:  
'''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 15:
<code>(-45,10,0)</code> 意味着向上45°,向左10°,滚转角为0°。
<code>(-45,10,0)</code> 意味着向上45°,向左10°,滚转角为0°。


{{tip|这些轴有时被称为rX、rY和rZ,以区别于[[vector|向量]]轴。}}
{{tip|这些轴有时被称为rX、rY和rZ,以区别于{{L|vector|向量}}轴。}}


{{note|在玩家视角中,Z轴被限制在±50。}}
{{note|在玩家视角中,Z轴被限制在±50。}}
Line 33: Line 34:
* 侧头使右或左耳朝向地面对应于正或负的[Z]
* 侧头使右或左耳朝向地面对应于正或负的[Z]


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


“顺时针旋转”假定观察者位于原点,朝向所述轴的正方向。
“顺时针旋转”假定观察者位于原点,朝向所述轴的正方向。
Line 57: Line 58:
== 从向量转换 ==
== 从向量转换 ==


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


<source lang=cpp>
<source lang=cpp>
Line 73: Line 74:


* [[Wikipedia:Yaw, pitch, and roll|偏航、俯仰和横滚]]
* [[Wikipedia:Yaw, pitch, and roll|偏航、俯仰和横滚]]
* [[getpos]]
* {{L|getpos}}
* [[Vector]] [[Coordinates]]
* {{L|Vector}} {{L|Coordinates}}
* [[AngleVectors()|<code>AngleVectors()</code> / <code>VectorAngles()</code>]]
* {{L|AngleVectors()|<code>AngleVectors()</code> / <code>VectorAngles()</code>}}
 
{{ACategory|Source class}}
{{ACategory|Glossary}}
{{ACategory|Variables}}

Latest revision as of 09:40, 12 July 2024

English (en)Deutsch (de)Русский (ru)中文 (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);

存在

另见