//collision move elipsoid with box bool kgmCollision::collision(vec3& start, vec3& end, float rx, float ry, float rz, box3& b, mtx4& btr) { int i = 0; vec3 box_points[8]; vec3 box_sides[6][4]; b.points(box_points); for(i = 0; i < 8; i++) box_points[i] = btr * box_points[i]; box_sides[0][0] = box_points[0]; box_sides[0][1] = box_points[1]; box_sides[0][2] = box_points[5]; box_sides[0][3] = box_points[4]; box_sides[1][0] = box_points[1]; box_sides[1][1] = box_points[3]; box_sides[1][2] = box_points[7]; box_sides[1][3] = box_points[5]; box_sides[2][0] = box_points[3]; box_sides[2][1] = box_points[2]; box_sides[2][2] = box_points[6]; box_sides[2][3] = box_points[7]; box_sides[3][0] = box_points[2]; box_sides[3][1] = box_points[0]; box_sides[3][2] = box_points[4]; box_sides[3][3] = box_points[6]; box_sides[4][0] = box_points[0]; box_sides[4][1] = box_points[2]; box_sides[4][2] = box_points[3]; box_sides[4][3] = box_points[1]; box_sides[5][0] = box_points[4]; box_sides[5][1] = box_points[5]; box_sides[5][2] = box_points[7]; box_sides[5][3] = box_points[6]; float dist = -1.0f; vec3 ptins; m_collision = false; for(i = 0; i < 6; i++) { plane pln(box_sides[i][0], box_sides[i][1], box_sides[i][2]); float edist = pln.distance(end); if(collision(start, end, rx, ry, rz, box_sides[i], 4)) { ptins = m_point; m_collision = true; if(edist > 0.0f) break; } } return m_collision; }