code: function(out, axis, angle) {
    var sa = Math.sin(angle), ca = Math.cos(angle), x = axis[0], y = axis[1],
        z = axis[2], xx = x * x, xy = x * y, xz = x * z, yy = y * y, yz = y * z,
        zz = z * z;
  
    out[0] = xx + ca - xx * ca;
    out[1] = xy - ca * xy - sa * z;
    out[2] = xz - ca * xz + sa * y;
    out[3] = xy - ca * xy + sa * z;
    out[4] = yy + ca - ca * yy;
    out[5] = yz - ca * yz - sa * x;
    out[6] = xz - ca * xz - sa * y;
    out[7] = yz - ca * yz + sa * x;
    out[8] = zz + ca - ca * zz;
    return out;
  }
docs: assumes that axis is normalized. don't expect  to get meaningful results when it's not