QAngle: Difference between revisions

From Valve Developer Community
Jump to navigation Jump to search
m (Added todo for non-existant pages. Remove the link all together if needed)
Line 42: Line 42:


* [[Wikipedia:Yaw, pitch, and roll]]
* [[Wikipedia:Yaw, pitch, and roll]]
* [[getpos|getpos and setang]]
* {{todo|[[getpos|getpos and setang]]}}
* [[Vector]]
* [[Vector]]
* [[AngleVectors()|<code>AngleVectors()</code> / <code>VectorAngles()</code>]]
* [[AngleVectors()|<code>AngleVectors()</code> / <code>VectorAngles()</code>]]

Revision as of 14:52, 15 April 2011

QAngle is a C++ class that represents a three-dimensional Euler angle, offset from the cardinal Z axis. Each QAngle contains three vec_t rotation values:

  • X pitch +down/-up
  • Y yaw +left/-right
  • Z roll +right/-left

(-45,10,0) means 45° up, 10° left and 0° roll.

Tip.pngTip:The axes are sometimes called rX, rY and rZ to distinguish them from vector axes.
Note.pngNote:Z is clamped to +/-50 for player viewangles.

Declaration

QAngle angMyAngle = QAngle(-45,10,0);
  • The classname QAngle is case-sensitive.
  • You could also assign to the X, Y and Z member variables separately.
  • The prefix ang (or sometimes just a) identifies the variable as an angle.

Orientation

Confusingly, Source's rY and rZ angle axes respectively point down the Z and Y vector axes - the opposite of what might be expected. X and rX are the same, however.

Even more confusingly, Hammer lists rotation axes as Y, Z, X! This is completely wrong, but luckily they are just labels: the values are stored in a single string (e.g. "-45 10 0") and interpreted when they reach C++ code as being rX rY rZ.

Todo: Are angles typically abs or local?

Converting from Vector

As there is no specific datadesc keyfield for angles, one chosen in Hammer will arrive as a vector. Its ordinates will represent degrees of rotation and not coordinates so it must be fixed up before use:

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

// Conversion back to a vector, if required
AngleVectors(angMyAngle, &vecFromHammer);

See also