QAngle: Difference between revisions
TomEdwards (talk | contribs) mNo edit summary |
TomEdwards (talk | contribs) (specified which Z axis angles are offset from - rZ wouldn't make much sense!) |
||
Line 1: | Line 1: | ||
{{toc-right}} | {{toc-right}} | ||
'''QAngle''' is a C++ class that represents a three-dimensional Euler angle, offset from the [[Coordinates|Z axis]]. Each QAngle contains three [[vec_t]] rotation values: | '''QAngle''' is a C++ class that represents a three-dimensional Euler angle, offset from the cardinal [[Coordinates|Z axis]]. Each QAngle contains three [[vec_t]] rotation values: | ||
* '''X''' pitch +down/-up | * '''X''' pitch +down/-up |
Revision as of 10:42, 1 August 2009
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.


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 justa
) 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.
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);