I'm rotating around 0,1,0 (y axis), and here are the results from 0 to -100 degrees:






Does anybody have a fixed version of the function, or is this how it's expected to work? Doesn't seem right...






Code: Select all
void RotatePointAroundVector (vec3_t dst, const vec3_t dir, const vec3_t point, float degrees)
{
float u = dir[0], v = dir[1], w = dir[2];
float x = point[0], y = point[1], z = point[2];
float ux = u * x, uy = u * y, uz = u * z, vx = v * x, vy = v * y, vz = v * z, wx = w * x, wy = w * y, wz = w * z;
float uu = u * u, ww = w * w, vv = v * v;
float s = (float)sin(DEG2RAD(degrees));
float c = (float)cos(DEG2RAD(degrees));
dst[0] = u * (ux + vy + wz) + (x * (vv + ww) - u * (vy + wz)) * c + (vz - wy) * s;
dst[1] = v * (ux + vy + wz) + (y * (uu + ww) - v * (ux + wz)) * c + (wx - uz) * s;
dst[2] = w * (ux + vy + wz) + (z * (uu + vv) - w * (ux + vy)) * c + (uy - vx) * s;
}