int sphere_intersect(struct ray r, struct sphere *spheres, int spheres_len, int *sphere_id) { int i; float t = 100000, distance = 0; for(i = 0; i < spheres_len; i++) { distance = sphere_collision(r, spheres[i]); if(distance > 0.0f) { if(distance < t) { t = distance; *sphere_id = i; } } } return t != 100000 ? t : 0; }
glm::vec3* sphere_collider::is_colliding_with(collider* other) { switch (other->type) { case SPHERE: return sphere_collision((sphere_collider*) other); break; case AABB: return AABB_collision((aabb_collider*) other); break; default: break; } return NULL; }