Tungsten
Nub
Cakes 0
Posts: 6
|
|
« on: March 14, 2018, 04:35:37 PM » |
|
Hey there, new to the game, to the forums, to the code base, fascinated and enamored by all three, and writing a paper about vectors in OA and Q3A. This might be in the wrong section (engine, maybe?)
So I see this method in q_math.c called "AngleVectors" and it appears in methods such as "AAS_WeaponJumpZVelocity." Could someone explain to me when you would use it, what it does, and what (if anything) it returns? I've been coding Python for 5 years, C# for 4, and Java for 3, but I've never dabbled in C even a little bit, so I'm pretty unfamiliar with how it works (Method-oriented, right?).
I get the basic gist of it, but I'm really not sure what the second half of the function does.
Here it is, for convenience sake:
void AngleVectors( const vec3_t angles, vec3_t forward, vec3_t right, vec3_t up) { float angle; static float sr, sp, sy, cr, cp, cy; // static to help MS compiler fp bugs
angle = angles[YAW] * (M_PI*2 / 360); sy = sin(angle); cy = cos(angle); angle = angles[PITCH] * (M_PI*2 / 360); sp = sin(angle); cp = cos(angle); angle = angles[ROLL] * (M_PI*2 / 360); sr = sin(angle); cr = cos(angle);
if (forward) { forward[0] = cp*cy; forward[1] = cp*sy; forward[2] = -sp; } if (right) { right[0] = (-1*sr*sp*cy+-1*cr*-sy); right[1] = (-1*sr*sp*sy+-1*cr*cy); right[2] = -1*sr*cp; } if (up) { up[0] = (cr*sp*cy+-sr*-sy); up[1] = (cr*sp*sy+-sr*cy); up[2] = cr*cp; } }
Thanks!
|