Pages: Author Topic: What does the method "AngleVectors" actually do?  (Read 2003 times)
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 = cp*cy;
forward = cp*sy;
forward = -sp;
}
if (right)
{
right = (-1*sr*sp*cy+-1*cr*-sy);
right = (-1*sr*sp*sy+-1*cr*cy);
right = -1*sr*cp;
}
if (up)
{
up = (cr*sp*cy+-sr*-sy);
up = (cr*sp*sy+-sr*cy);
up = cr*cp;
}
}

Thanks!
 « Last Edit: March 14, 2018, 04:47:26 PM by Tungsten » Logged

I like the 'puters.
Tungsten
Nub

Cakes 0
Posts: 6 « Reply #1 on: March 15, 2018, 03:35:45 PM »

I think I figured it out. It takes the vectors, and changes their angles based on an input vector with an angle. The `if` statements check if the supplied fields (forward, right, and up, respectively) are not null, and if they aren't, the code runs. Logged

I like the 'puters.
 Pages: