The docs say that if you pass 0 as the maximum number of contacts to dCollide() then ODE considers it at 1. This is true as long as both geometries are not spaces, but if one of the geometries you're sending to dCollide() is a space, then no contact points will ever be generated, ever. Was this intentional?